2014-08-29 70 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本身缓冲多个目的写入到一个大的写操作。所以,你的选择。 =)