java写文件方法之比较

进口java.io.BufferedOutputStream;

进口java.io.File;

进口java.io.FileOutputStream;

进口java.io.FileWriter;

进口java.nio.ByteBuffer;

进口java.nio.channels.FileChannel;

/* *

*测试各种写文件的方法性能。

* @author老紫竹JAVA世纪网(java2000.net)

*

*/

公共类T {

公共静态void main (String [] args) {

FileOutputStream=零;

FileOutputStream outSTr=零;

BufferedOutputStream迷=零;

FileWriter fw=零;

int数=1000000;//写文件行数

尝试{

byte [] b=安馐詊ava文件操作/r/n”.getBytes ();

=新FileOutputStream(新文件(“C:/add.txt”));

长开始=System.currentTimeMillis ();

(int i=0;我& lt;计数;我+ +){

out.write (bs);

}

out.close ();

长结束=System.currentTimeMillis ();

system . out。println (“FileOutputStream执行耗时:“+(结束-开始)+“豪秒”);

outSTr=new FileOutputStream(新文件(“C:/add0.txt”));

迷=new BufferedOutputStream (outSTr);

长begin0=System.currentTimeMillis ();

(int i=0;我& lt;计数;我+ +){

Buff.write (bs);

}

Buff.flush ();

Buff.close ();

长end0=System.currentTimeMillis ();

system . out。println (“BufferedOutputStream执行耗时:“+ (end0 - begin0) +“豪秒”);

fw=new FileWriter (“C:/add2.txt”);

长begin3=System.currentTimeMillis ();

(int i=0;我& lt;计数;我+ +){

弗兰克-威廉姆斯。写(“测试java文件操作/r/n”);

}

fw.flush ();

fw.close ();

长end3=System.currentTimeMillis ();

system . out。println (“FileWriter执行耗时:“+ (end3 - begin3) +“豪秒”);

长begin4=System.currentTimeMillis ();

字符串路径=癈:/add3.txt”;

ByteBuffer bb=ByteBuffer.wrap (bs);

FileChannel out2=new FileOutputStream(路径).getChannel ();

(int i=0;我& lt;计数;我+ +){

out2.write (bb);

bb.rewind ();

}

out2.close ();

长end4=System.currentTimeMillis ();

system . out。println (“FileChannel执行耗时:“+ (end4 - begin4) +“豪秒”);

}捕捉(异常e) {

e.printStackTrace ();

}最后{

尝试{

fw.close ();

Buff.close ();

outSTr.close ();

out.close ();

}捕捉(异常e) {

e.printStackTrace ();

}

}

}

}


在我的笔记本上,运行结果如下


FileOutputStream执行耗时:4891豪秒


BufferedOutputStream执行耗时:78豪秒


FileWriter执行耗时:438豪秒


FileChannel执行耗时:2812豪秒


当然最终生成的文件都是正确的


总结:


BufferedOutputStream由于有缓冲,性能明显好


FileOutputStream性能最差,因为其每次都写入字节。


FileWriter性能很一般


FileChannel使用了nio,但如果没有缓冲,必能太指望性能了


java写文件方法之比较