java写文件比较

来源:互联网 发布:淘宝可以买保健品吗 编辑:程序博客网 时间:2024/05/18 00:26

最近对以前开发的一个通用数据迁移的软件进行优化。除了用JDK5.0的多线程技术进行的改进之外,也比较了一下java写文件的性能。
    在 java写文件中,通常会使用FileOutputStream和FileWriter,FileWriter只能写文本文件。 FileOutputStream也经常结合BufferedOutputStream。因为实际应用中写文本文件的情况占了大多数。所以下面测试用不同 的方式生成一个相同行数、大小相同的文件的三种不同方式。

Java代码 java写文件比较 - qunqun - 群群的梦想

 

  1. import java.io.File;   
  2. import java.io.FileOutputStream;   
  3. import java.io.*;   
  4.   
  5. public class FileTest {   
  6.     public FileTest() {   
  7.     }   
  8.   
  9.     public static void main(String[] args) {   
  10.         FileOutputStream out = null;   
  11.         FileOutputStream outSTr = null;   
  12.         BufferedOutputStream Buff=null;   
  13.         FileWriter fw = null;   
  14.         int count=1000;//写文件行数   
  15.         try {   
  16.             out = new FileOutputStream(new File("C:/add.txt"));   
  17.             long begin = System.currentTimeMillis();   
  18.             for (int i = 0; i < count; i++) {   
  19.                 out.write("测试java 文件操作/r/n".getBytes());   
  20.             }   
  21.             out.close();   
  22.             long end = System.currentTimeMillis();   
  23.             System.out.println("FileOutputStream执行耗时:" + (end - begin) + " 豪秒");   
  24.   
  25.             outSTr = new FileOutputStream(new File("C:/add0.txt"));   
  26.              Buff=new BufferedOutputStream(outSTr);   
  27.             long begin0 = System.currentTimeMillis();   
  28.             for (int i = 0; i < count; i++) {   
  29.                 Buff.write("测试java 文件操作/r/n".getBytes());   
  30.             }   
  31.             Buff.flush();   
  32.             Buff.close();   
  33.             long end0 = System.currentTimeMillis();   
  34.             System.out.println("BufferedOutputStream执行耗时:" + (end0 - begin0) + " 豪秒");   
  35.   
  36.   
  37.             fw = new FileWriter("C:/add2.txt");   
  38.             long begin3 = System.currentTimeMillis();   
  39.             for (int i = 0; i < count; i++) {   
  40.                 fw.write("测试java 文件操作/r/n");   
  41.             }   
  42.                         fw.close();   
  43.             long end3 = System.currentTimeMillis();   
  44.             System.out.println("FileWriter执行耗时:" + (end3 - begin3) + " 豪秒");   
  45.   
  46.         } catch (Exception e) {   
  47.             e.printStackTrace();   
  48.         }   
  49.         finally {   
  50.             try {   
  51.                 fw.close();   
  52.                 Buff.close();   
  53.                 outSTr.close();   
  54.                 out.close();   
  55.             } catch (Exception e) {   
  56.                 e.printStackTrace();   
  57.             }   
  58.         }   
  59.     }   
  60.   
  61.   
  62. }   

 

  1. 1.当count=1000的,即写文件1000行的时候,写出的文件大小为18.5KB:   
  2. FileOutputStream执行耗时:46 豪秒   
  3. BufferedOutputStream执行耗时:31 豪秒   
  4. FileWriter执行耗时:15 豪秒   
  5.   
  6.   
  7. 2.当count=10000的,即写文件10000行的时候,写出的文件大小为185KB:   
  8. FileOutputStream执行耗时:188 豪秒   
  9. BufferedOutputStream执行耗时:32 豪秒   
  10. FileWriter执行耗时:16 豪秒   
  11.   
  12.     
  13.   
  14. 3.当count=100000的,即写文件100000行的时候,写出的文件大小为1856KB:   
  15. FileOutputStream执行耗时:1266 豪秒   
  16. BufferedOutputStream执行耗时:125 豪秒   
  17. FileWriter执行耗时:93 豪秒   
  18.   
  19.     
  20.   
  21. 4.当count=1000000的,即写文件1000000行的时候,写出的文件大小为18555KB:   
  22. FileOutputStream执行耗时:12063 豪秒   
  23. BufferedOutputStream执行耗时:1484 豪秒   
  24. FileWriter执行耗时:969 豪秒  

由 以上数据可以看到,如果不用缓冲流BufferedOutputStream,FileOutputStream写文件的鲁棒性是很不好的。当写 1000000行的文件的时候,FileOutputStream比FileWriter要慢11094毫秒(11 秒),BufferedOutputStream比FileWriter慢515毫秒。
    不要小看这几秒的时间。当操作的数据量很大的时候,这点性能的差距就会很大了。在通用数据迁移工具导出数据库2千万条记录生成sql脚本文件的时候,性能性能相差10分钟以上。

原创粉丝点击