java对文件的操作,提供了上百个类来操作。
?
对与我们常用的有,outputstreamwriter、writer、bufferedoutputstream、fileoutputstream以及fileinputstream、reader、inputstreamreader等相关类
?
先做个比较:对文本文件操作时,我们一般使用filereader、bufferedreader类;而非文件、即二进制文件操作时,我们使用inputstream以及相关类、而对于流的操作,在
远程接口rmi,或者通信类的业务处理中,应用较多。
?
fileoutputstream以及bufferedoutputstream对文件写的操作;当操作大文件时,使用bufferedoutputstream的效率会明显比fileoutputstream高很多。
当然bufferedoutputstream继承自filteroutputstream;所以其功能也相当的丰富。并且在很多应用中我们都用到了filteroutputstream这个类,比如zip,jar包、rmi类和接口、crypto提供加密的类和接口等等
?
文件操作类中,也还有很多比较有用的类,比如文件流描述类filedescriptor等等;有待挖掘
?
当有特殊需求是,我们可以继承上面的接口或者扩展上面的类,来实现特殊的业务。
?
?
package com.xiva.demo;import java.io.bufferedoutputstream;import java.io.bufferedreader;import java.io.bufferedwriter;import java.io.file;import java.io.fileoutputstream;import java.io.filereader;import java.io.filewriter;import java.io.ioexception;import java.io.inputstream;import java.io.outputstream;import java.io.outputstreamwriter;import java.io.reader;import java.io.writer;import java.util.scanner;import org.junit.test;public class filedemo { /** * * @description 删除文件 * @author xiva */ @test public void deletefile(){ file file = new file("src/_tian.jpg"); boolean res = false; if(file.exists()){ res = file.delete(); } if(res){ system.out.println("delete success!"); }else{ system.out.println("delete fail!"); } } /** * * @description 文件重命名 * @author xiva */ @test public void renamefile(){ file file = new file("src/_tian.jpg"); boolean res = false; if(file.exists() && file.isfile()){ res = file.renameto(new file("src/tian.jpg")); } if(res){ system.out.println("copy success!"); }else{ system.out.println("copy fail!"); } } /** * * @description 读取文本文件内容 * @author xiva * @throws ioexception */ @test public void readfile() throws ioexception{ inputstream is = filedemo.class.getclassloader().getresourceasstream("dbcpconfig.properties");// file file = new file("src/content.txt");// filereader freader = new filereader(file); //流编码才是字节编码// reader isreader = new inputstreamreader(is, "utf-8");// bufferedreader buffer = new bufferedreader(isreader);// string linestr;// linestr = buffer.readline();// while(linestr != null){// system.out.println(linestr);// linestr = buffer.readline();// } //scanner类提供更多方便的方法,最为主要的是为文本文件操作提供便利的函数 scanner sc = new scanner(is,"utf-8"); while(sc.hasnextline()){ system.out.println(sc.nextline()); } is.close(); } /** * * @description filewriter写文件 * @author xiva * @throws ioexception */ @test public void writefile() throws ioexception{ file file = new file("src/test.txt"); if(!file.exists()){ file.createnewfile(); } // reader isreader = new filereader(file);// bufferedreader buffer = new bufferedreader(isreader);// string linestr;// linestr = buffer.readline(); scanner sc = new scanner(file,"utf-8"); stringbuffer sbuffer = new stringbuffer(); while (sc.hasnextline()){ sbuffer.append(sc.nextline()); } //append if true, then bytes will be written to the end of the file rather than the beginning filewriter fw = new filewriter(file,true); bufferedwriter bw = new bufferedwriter(fw); bw.append(sbuffer.tostring()); bw.write("i'm xiva,我是xiva"); bw.newline(); bw.write("i'm njit.shot_go,我是shot_go");// string message = "i'm njit.shot_go,我是shot_go";// for(char mc:message.tochararray()){// bw.append(mc);// } bw.flush(); bw.close(); fw.close(); } /** * * @description fileoutputstream写文件 * @author xiva * @throws ioexception */ @test public void writefosfile() throws ioexception{ file file = new file("src/test.txt"); if(!file.exists()){ file.createnewfile(); } //append if true, then bytes will be written to the end of the file rather than the beginning fileoutputstream fos = new fileoutputstream(file,true); bufferedoutputstream bos = new bufferedoutputstream(fos); for (int i=0; i<100000; i++){ string message = "i'm njit.shot_go,我是shot_go"; bos.write(message.getbytes()); bos.flush(); bos.write("\r\n".getbytes()); } bos.close(); fos.close(); } /** * * @description 文件列表 * @author xiva * @param rootfile */ public void listdictionary(file rootfile){ file[] files = rootfile.listfiles(); for (file file:files){ if(file.isdirectory()){ system.out.println("add to tree node"); listdictionary(file); }else{ system.out.println(file.getpath()); } } } @test public void testlistdictionary(){ file rootfile = new file("e:"+ file.separatorchar +"liber"); listdictionary(rootfile); } }
?而对文件的操作,总结为:
1、删除文件或文件夹
2、创建文件或文件夹
3、读取文本或者二进制文件
4、写文本或者二进制文件(对于写二进制文件,我认为在
图像处理以及音频视频处理中会使用到)
5、重命名文件,遍历文件,移动文件等等