java写文件方法之比较

  1. importjava.io.BufferedOutputStream;
  2. importjava.io.File;
  3. importjava.io.FileOutputStream;
  4. importjava.io.FileWriter;
  5. importjava.nio.ByteBuffer;
  6. importjava.nio.channels.FileChannel;
  7. /**
  8. *测试各种写文件的方法性能。
  9. *
  10. *@author老紫竹JAVA世纪网(java2000.net)
  11. *
  12. */
  13. publicclassT{
  14. publicstaticvoidmain(String[]args){
  15. FileOutputStreamout=null;
  16. FileOutputStreamoutSTr=null;
  17. BufferedOutputStreamBuff=null;
  18. FileWriterfw=null;
  19. intcount=1000000;//写文件行数
  20. try{
  21. byte[]bs="测试java文件操作/r/n".getBytes();
  22. out=newFileOutputStream(newFile("C:/add.txt"));
  23. longbegin=System.currentTimeMillis();
  24. for(inti=0;i<count;i++){
  25. out.write(bs);
  26. }
  27. out.close();
  28. longend=System.currentTimeMillis();
  29. System.out.println("FileOutputStream执行耗时:"+(end-begin)+"豪秒");
  30. outSTr=newFileOutputStream(newFile("C:/add0.txt"));
  31. Buff=newBufferedOutputStream(outSTr);
  32. longbegin0=System.currentTimeMillis();
  33. for(inti=0;i<count;i++){
  34. Buff.write(bs);
  35. }
  36. Buff.flush();
  37. Buff.close();
  38. longend0=System.currentTimeMillis();
  39. System.out.println("BufferedOutputStream执行耗时:"+(end0-begin0)+"豪秒");
  40. fw=newFileWriter("C:/add2.txt");
  41. longbegin3=System.currentTimeMillis();
  42. for(inti=0;i<count;i++){
  43. fw.write("测试java文件操作/r/n");
  44. }
  45. fw.flush();
  46. fw.close();
  47. longend3=System.currentTimeMillis();
  48. System.out.println("FileWriter执行耗时:"+(end3-begin3)+"豪秒");
  49. longbegin4=System.currentTimeMillis();
  50. Stringpath="C:/add3.txt";
  51. ByteBufferbb=ByteBuffer.wrap(bs);
  52. FileChannelout2=newFileOutputStream(path).getChannel();
  53. for(inti=0;i<count;i++){
  54. out2.write(bb);
  55. bb.rewind();
  56. }
  57. out2.close();
  58. longend4=System.currentTimeMillis();
  59. System.out.println("FileChannel执行耗时:"+(end4-begin4)+"豪秒");
  60. }catch(Exceptione){
  61. e.printStackTrace();
  62. }finally{
  63. try{
  64. fw.close();
  65. Buff.close();
  66. outSTr.close();
  67. out.close();
  68. }catch(Exceptione){
  69. e.printStackTrace();
  70. }
  71. }
  72. }
  73. }

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

FileOutputStream执行耗时:4891 豪秒

BufferedOutputStream执行耗时:78 豪秒

FileWriter执行耗时:438 豪秒

FileChannel执行耗时:2812 豪秒

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

总结:

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

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

FileWriter 性能很一般

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

你可能感兴趣的:(java)