2014-08-29 68 views
0

我已經建立了一個緩衝寫入器的循環寫入一個字符串數組到一個文件,似乎很簡單的權利?出於某種原因,我確信我會因爲錯過而感到愚蠢,但它會在每次迭代時寫上前一行文本。緩衝寫入器覆蓋everyline

以下是循環

for(int i = 0; listnames.length > i; i++){ 
    String[] data = getItemsandAisles(listnames[i]); 
    for(int x = 0; data.length > x; x ++){ 
     BufferedWriter bw = new BufferedWriter(new FileWriter(listfile[i])); 
     System.out.println("Writing " + data[x] + " to file " + listfile[i].getAbsolutePath()); 
     bw.write(data[x]); 
     bw.flush(); 
     bw.newLine(); 
     bw.close(); 
    } 
} 

這是所有我把輸出的日誌貓,這只是第一次迭代,因爲它有最物品

Writing COFFEE CREAMERS 5 to file /data/data/dev.shaw.MyShoppingPlanner/files/sample list.txt 
Writing SAUCES APPLE CRANBERRY 6 to file /data/data/dev.shaw.MyShoppingPlanner/files/sample list.txt 
Writing COCOA 5 to file /data/data/dev.shaw.MyShoppingPlanner/files/sample list.txt 
Writing UMBRELLAS Front End Rack to file /data/data/dev.shaw.MyShoppingPlanner/files/sample list.txt 
Writing PET NEEDS 9A\/B to file /data/data/dev.shaw.MyShoppingPlanner/files/sample list.txt 
Writing ITALIAN CHEESE 17 to file /data/data/dev.shaw.MyShoppingPlanner/files/sample list.txt 
Writing EGGS Dairy to file /data/data/dev.shaw.MyShoppingPlanner/files/sample list.txt 
Writing BACON Meat to file /data/data/dev.shaw.MyShoppingPlanner/files/sample list.txt 

,然後當我從設備下載txt文件的最終輸出的只有一行

BACON Meat 

這讓我相信它實際上並沒有創造新的路線。任何幫助將不勝感激。我知道這裏有一些類似的問題,但我嘗試了所有這些解決方案,但他們似乎無法解決問題。

回答

0

嘗試第二循環像下面之前打開文件:

for(int i = 0; listnames.length > i; i++){ 
    BufferedWriter bw = new BufferedWriter(new FileWriter(listfile[i])); 
    String[] data = getItemsandAisles(listnames[i]); 
    for(int x = 0; data.length > x; x ++){ 
     System.out.println("Writing " + data[x] + " to file " + listfile[i].getAbsolutePath()); 
     bw.write(data[x]); 
     bw.newLine();    
     //bw.flush(); --> not necessary here unless you really need the data on the disk "right now" 
    } 
    bw.flush(); 
    bw.close(); 
} 

或者更好的,也許你想使用StringBuilder如下。

for(int i = 0; listnames.length > i; i++){ 
    StringBuilder sb = new StringBuilder(); 
    String[] data = getItemsandAisles(listnames[i]); 
    for(int x = 0; data.length > x; x ++){ 
     System.out.println("Writing " + data[x] + " to file " + listfile[i].getAbsolutePath()); 
     sb.append(data[x]).append("\n"); 
    } 
    BufferedWriter bw = new BufferedWriter(new FileWriter(listfile[i])); 
    bw.write(sb.toString()); 
    bw.flush(); 
    bw.close(); 
} 

然而,BufferedWriter本身緩衝多個目的寫入到一個大的寫操作。所以,你的選擇。 =)