竹笋

首页 » 问答 » 环境 » 每天一个编程小知识,迅速成为大神2J
TUhjnbcbe - 2022/10/8 13:10:00

Java中的IO流

File类的使用

java.io.File类:文件和文件目录路径的抽象表现形式,与平台无关

File能新建、删除、重命名文件和目录,但File不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流

想要在Java程序中表示一个真实存在的文件或,目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。

File对象可以作为参数传递给流的构造器

/*1、如何创建一个File类的实例*Filefile=newFile(StringfilePath)*Filefile=newFile(StringparentPath,StringchildPath)*Filefile=newFile(FileparentFile,StringchildPath)*2、相对路径:相较于某个路径下,指明的路径*绝对路径:包含盘符在内的文件或文件目录的路径**3、路径分隔符*windows:\\*unix:/**/

File类的获取功能

publicStringgetAbsolutePath():获取绝对路径publicStringgetPath():获取路径publicStringgetName():获取名称publicStringgetParent():获取上层文件目录路径。若无,返回nullpubliclonglength():获取文件长度(即:字节数)。不能获取目录的长度publiclonglastModified():获取最后一次修改时间,毫秒值//适用于文件目录publicString[]list():获取指定目录下的所有文件或者文件目录的名称数组publicFile[]listFiles():获取指定目录下的所有文件或者文件目录的File数组//测试

Testpublicvoidtest1(){//构造器1:Filefile=newFile("hello.txt");//相对于当前moduleSystem.out.println(file.getAbsolutePath());System.out.println(file.getPath());System.out.println(file.getName());System.out.println(file.getParent());System.out.println(file.length());System.out.println(newDate(file.lastModified()));}

File类的重命名功能

publicbooleanrenameTo(Filedest):把文件重命名为指定的文件路径要想保证成功,必须保证调用方法的文件时不存在的,dest是不存在的

File类的判断功能

publicbooleanisDirectory():判断是否是文件目录publicbooleanisFile():判断是否是文件publicbooleanexists():判断是否存在publicbooleancanReady():判断是否可读publicbooleancanWrite():判断是否可写publicbooleanisHidden():判断是否隐藏//测试

Testpublicvoidtest2(){//构造器1:Filefile=newFile("hello.txt");//相对于当前moduleSystem.out.println(file.isDirectory());System.out.println(file.isFile());System.out.println(file.exists());System.out.println(file.canRead());System.out.println(file.canWrite());System.out.println(file.isHidden());}

File类的创建功能(创建硬盘中对应的文件或文件目录)

publicbooleancreateNewFile():创建文件,若文件存在,则不创建,返回falsepublicbooleanmkdir():创建文件目录。如果此文件目录存在,就不创建了,如果此文件目录的上层目录不存在,也不创建publicbooleanmkdirs():创建文件目录,如果上册文件目录不存在,一并创建注意事项:如果你创建文件或则文件目录没有写盘符路径,那么,默认在项目路径下。

Testpublicvoidtest3()throwsIOException{//文件的创建Filefile=newFile("hi.txt");if(!file.exists()){file.createNewFile();System.out.println("创建成功");}else{file.delete();System.out.println("删除成功");}}

Testpublicvoidtest4(){//文件目录的创建Filefile=newFile("D:\\ycq");if(file.mkdir()){System.out.println("创建成功");}Filefile1=newFile("D:\\ycq\\ycq");if(file1.mkdirs()){System.out.println("创建成功");}}

File类的删除功能

publicbooleandelete():删除文件或文件夹删除注意事项:Java中的删除不走回收站。要删除一个文件目录,请注意该文件目录内不能包含文件或文件目录。

File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入和读取文件内容的操作,如果需要读取或写入文件内容,必须使用IO流来完成。

IO流原理及流的分类

按造操作数据单位不同分为:字节流(8bit)和字符流(16bit)

按照数据流的流向不同分为:输入流和输出流

按照流的角色不同分为:节点流,处理流

/**流的体系结构*抽象基类节点流缓冲流(处理流的一种)*InputStreamFileInputStreamBufferedInputStream*OutputStreamFileOutputStreamBufferedOutputStream*ReaderFileReaderBufferedReader*WriterFileWriterBufferedWriter***///测试FileReader说明点:1、read():返回读入的一个字符,如果达到文件末尾,返回-12、异常的处理:为了保证流资源一定可以执行关闭操作,需要使用try-catch-finally处理3、读入的文件一定要存在,否则会包FileNotFoundException

TestpublicvoidtestFileReader()throwsIOException{//实例化File类的对象,指明要操作的文件Filefile=newFile("hello.txt");//相较于当前Module//2、提供具体的流FileReaderfr=newFileReader(file);//3、数据的读入//read():返回读入的一个字符,如果达到文件末尾,返回-1//方式一:/*intdata=fr.read();while(data!=-1){System.out.print((char)data);data=fr.read();}*///方式二:语法上针对方式一的修改intdata;while((data=fr.read())!=-1){System.out.print((char)data);}//4、流的关闭操作if(fr!=null){fr.close();}}//对read()操作升级:使用read()的重载方法

TestpublicvoidtestFileReader1(){//1、File类的实例化Filefile=newFile("hello.txt");//2、FileReader流的实例化FileReaderfr=null;try{fr=newFileReader(file);//3、读入的操作//read(char[]cbuf):返回每次读入cbuf数组中的字符的个数,如果到达文件末尾,返回-1char[]cbuf=newchar[5];intlen;while((len=fr.read(cbuf))!=-1){//错误的写法/*for(inti=0;icbuf.length;i++){System.out.print(cbuf);}*/for(inti=0;ilen;i++){System.out.print(cbuf);}}}catch(IOExceptione){e.printStackTrace();}finally{//4、资源的关闭if(fr!=null){try{fr.close();}catch(IOExceptione){e.printStackTrace();}}}}/*从内存中写出数据到硬盘的文件里*说明:*1、输出操作,对应的File可以不存在的,并不会报异常*2、*File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件*File对应的硬盘中的文件如果已经存在:*如果流使用的构造器是FileWriter(file,false)/FileWriter(file):对原有文件的覆盖*如果流使用的构造器是FileWriter(file,true)不会对原有文件的覆盖,而是追加内容**/

TestpublicvoidtestFileWriter(){//1、提供File类的独享,指明写出到的文件Filefile=newFile("hello1.txt");FileWriterfw=null;try{//2、提供FileWriter的对象,用于数据的写出fw=newFileWriter(file);//3、写出的操作fw.write("Ihaveadream!\n");fw.write("Youneedtohaveadream!");}catch(IOExceptione){e.printStackTrace();}finally{if(fw!=null){try{fw.close();}catch(IOExceptione){e.printStackTrace();}}}}

TestpublicvoidtestFileReaderFileWriter(){//1、创建File类的对象,指明读入和写出的文件FilesrcFile=newFile("hello.txt");FiledestFile=newFile("hello2.txt");FileReaderfr=null;FileWriterfw=null;try{//2、创建输入流和输出流的对象fr=newFileReader(srcFile);fw=newFileWriter(destFile);//3、数据的读入和写出操作char[]cbuf=newchar[5];intlen;while((len=fr.read(cbuf))!=-1){fw.write(cbuf,0,len);}}catch(IOExceptione){e.printStackTrace();}finally{//4、关闭流资源try{if(fw!=null){fw.close();}}catch(IOExceptione){e.printStackTrace();}try{if(fr!=null){fr.close();}}catch(IOExceptione){e.printStackTrace();}}}

字节流和字符流类似,把FileReaderFileWriter换成FileInputStream和FileOutputStream

缓冲流的使用

package

1