使用字节流,字符流FileWriter和BufferedWriter通过复制同一文件,比较它们用时的多少

来源:互联网 发布:清华大学网络学堂登录 编辑:程序博客网 时间:2024/06/11 23:26
package testIO;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.Reader;import java.io.Writer;public class testWriter {static File f=new File("C:\\Users\\Administrator\\Desktop\\lhni.txt");//需要被复制的文件public static void main(String[] args) throws IOException {testbyte();testchar();testFileWriter();}//字节复制的方法public  static void testbyte() throws IOException{//使用字节流FileInputStream,FileOutputStream来实现文件的复制InputStream st=new FileInputStream(f);File f1=new File(f.getParent(), f.getName().substring(f.getName().lastIndexOf("i")));OutputStream st1=new FileOutputStream(f1);int count=-1;byte[] b=new byte[10]; //通过在复制前获得系统的时间long start=System.currentTimeMillis();while((count=st.read(b))!=-1){st1.write(b, 0, count);}st.close();st1.close(); //在复制完成之后在获取一次系统的时间long end=System.currentTimeMillis();long cha=end-start;//两次时间相减得到复制文件的时间System.out.println("This is OutputStream time:"+" "+cha);}//字符复制的方法public static void testchar() throws IOException{//使用字符流复制文件Reader r=new InputStreamReader(new FileInputStream(f));//将复制文件的父目录与源文件设置为相同File f2=new File(f.getParent(), f.getName().substring(f.getName().lastIndexOf("n")));Writer w=new OutputStreamWriter(new FileOutputStream(f2));BufferedReader b1=new BufferedReader(r);BufferedWriter w1=new BufferedWriter(w);b1.readLine();int count=-1;char[] b=new char[10];//b1.read(b);long start=System.currentTimeMillis();while((count=b1.read(b))!=-1){w1.write(b, 0, count);w1.flush();}b1.close();w1.close();long end=System.currentTimeMillis();long cha1=end-start;System.out.println("This is BufferedWriter time:"+" "+cha1);}public static void testFileWriter() throws IOException{//使用字符流的FileReader和FileWriter来实现复制文件// Reader d=new InputStreamReader(new FileInputStream(f)); FileReader r1=new FileReader(f); File f1=new File(f.getParent(),f.getName().substring(f.getName().lastIndexOf("h"))); FileWriter w1=new FileWriter(f1); char[] c=new char[10]; int count=-1; //通过在复制前获得系统的时间 long start=System.currentTimeMillis();//获取系统的时间 while((count=r1.read(c))!=-1){//读取文件内容 w1.write(c, 0, count);// w1.flush(); } r1.close(); w1.close(); //在复制完成之后在获取一次系统的时间 long end=System.currentTimeMillis(); //两次时间相减得到复制文件的时间 long cha2=end-start; System.out.println("This is FileWriter time:"+" "+cha2);  }}

运行后的截图:
通过两次获取系统的时间比较复制文件用时的多少,结果发现FileWriter用时最短。
                                             
1 0