2013-07-11 66 views
-1

有什麼方法可以將字節附加到文件中? Java代碼從文件夾中的PDF文件獲取所有字節並追加到.dat文件中,但追加不起作用。如果我使用寫入工作,但它只能寫入第一個PDF文件。其他PDF文件呢?有什麼方法可以將.dat文件中的所有字節添加進去?將字節附加到.dat文件的java代碼

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Arrays; 
import java.util.Calendar; 

public class newxmlnew { 

    public static void main(String[] args) throws IOException { 
    File folder = new File ("07072013"); 
    File[] listOfFiles = folder.listFiles(); 

    System.out.println("There are " + listOfFiles.length + " files"); 

    String filesin; 



    int offset = 0; 
    int size = 0; 

    FileOutputStream out = new FileOutputStream("07072013\\" + "jayraj" + ".dat",true); 

    for (int i = 0; i < listOfFiles.length; i++) { 

     File f = listOfFiles[i]; 

     System.out.println(i + " " + f.getAbsolutePath()); 
     if (f.isFile()) { 

      filesin = listOfFiles[i].getName(); 

      if (filesin.endsWith("pdf")) { 
       System.out.println(filesin); 

       Path aPath = Paths.get(f.getAbsolutePath()); 

       System.out.println(filesin.toString()); 

       byte[] actualBytes = Files.readAllBytes(aPath); 
       size = actualBytes.length; 


       try { 
       out.write(actualBytes); 
       } finally { 
        out.close(); 
       } 
      } 
     } 
    } 


    } 
} 
+0

快速谷歌可以幫助這一個。 –

+0

我在谷歌搜索,附加字節,但..它沒有給我任何解決方案..請幫助我..謝謝! – user2559055

回答

1

你需要在你的循環之外聲明它,像這樣,註釋布爾結束是爲了追加數據。

FileOutputStream out = new FileOutputStream("07072013\\" + "jayraj" + ".dat", true); 

然後使用

out.write(actualBytes) 

快速查看文檔的FileOutputStream顯示了這個

正如埃裏克也

提到移動finally塊千鈞一髮後才for循環:

try { 
    for (all files ...) { 
     write .. 
    } 
} finally { 
    out.close(); 
} 
+0

所以我需要創建文件外循環..我試過了,但它給我錯誤流關閉!我在我的文章中編輯該代碼請幫助我..謝謝! – user2559055

+0

謝謝你們!它的工作現在..非常感謝你! – user2559055

1

你創建你的循環,這將覆蓋以前的文件中一個新的FileOutputStream

+0

所以,我需要撬出一邊for循環..其實我試過,但..它給我的錯誤,它也沒有追加.....請幫助我..謝謝! – user2559055

+0

您還需要將循環外的'out.close();'移出,否則該流會在第一次之後關閉。 – tfoo

1

問題是finally塊。第一次寫入後立即執行,否則失敗。因此輸出流在寫入一個文件後總是關閉。

  try { 
      out.write(actualBytes); 
      } finally { 
       out.close(); 
      } 

移動finally塊千鈞一髮後才for循環:

try { 
    for (all files ...) { 
     write .. 
    } 
} finally { 
    out.close(); 
}