2013-03-29 42 views
0

我正在讀取file1.txt中的行,並且只將選定的幾行復制到file2.txt中。但是java不會複製應該根據我的代碼複製的所有行。底部的625行不會被複制。我必須注意到,應該複製的行都顯示在控制檯上。所以txt文件沒有問題。這裏出了什麼問題?代碼如下:Java無法打印所有從file1.txt到file2.txt的行?

InputStream i = new FileInputStream("file1.txt"); 
     InputStreamReader is=new InputStreamReader(i); 
     BufferedReader bsa = new BufferedReader(iq); 

     FileWriter fw=new FileWriter("file2.txt"); 
     BufferedWriter bw=new BufferedWriter(fw); 
     PrintWriter pr=new PrintWriter(bw); 

     String z=""; 
     for(int i=0;i<3137;i++){ 
      z=bsa.readLine(); 
      for(int q=0;q<2538;q++){ 
       if(array1[i].equals(array2[q])==true){ 
        System.out.println(z);//to see printed lines in console 
        pr.println(z);//printing to file2 
       } 
      } 
     } 
+3

你從哪裏得到你的幻數? –

+0

硬編碼哈哈。正如人們下面所說的,我不得不關閉printwriter。 –

回答

3

您是否關閉了PrintWriter

pr.close(); 

PrintWriter緩衝器的數據,直到其它的緩衝器滿後,它寫入磁盤。它有一個默認緩衝區大小爲8192 characters,因此可以很容易地讓幾百行保持不寫,直到調用close

+0

打敗了我,你贏了這一輪:P –

2

你需要你的PrintWriter使用pr.close();

1

爲了從一個文件複製到另一個我會推薦關閉:

try (final InputStream inputStream = new FileInputStream(file1); 
      final OutputStream outputStream = new FileOutputStream(file2)) { 
     final byte[] buffer = new byte[1024]; 
     int numRead = -1; 
     while ((numRead = inputStream.read(buffer)) >= 0) { 
      outputStream.write(buffer, 0, numRead); 
     } 
    } 

它使用Java 7的try-與資源的語法;它也可以避免你的魔法數字。

您還可以使用FileChannel,這是一個稍微簡單:

try (final FileChannel source = new RandomAccessFile(file1, "r").getChannel(); 
      final FileChannel dest = new RandomAccessFile(file2, "rw").getChannel()) { 
     source.transferTo(0, source.size(), dest); 
    } 
+0

具有'FileChannel'的Java NIO遠遠優於將字節讀入內存並寫入文件的過時方法。使用'FileChannel'實際上可以讓操作系統聰明地複製文件。另外,OP不想複製所有內容。 –

+0

@TimBender我只是擴展了OP的原始方法;我也加了一個NIO的例子。 –

+0

是的。刪除了反對票(因爲它並不令人反感),但OP仍然只需要一組選定的行。 –

相關問題