2013-06-21 44 views
2

由於某種原因,當我在我的程序中創建一個新的BufferedWriter和FileWriter(即使我還沒有用它來寫任何東西),它會清除我選擇的所有文本文件。出於某種原因使用FileWriter和BufferedWriter清理文件?

selectedFile由JFileChooser決定。

public static File selectedFile; 

    public static void Encrypt() throws Exception { 

    try { 
     //if I comment these two writers out the file is not cleared. 
     FileWriter fw = new FileWriter(selectedFile.getAbsoluteFile()); 
     BufferedWriter bw = new BufferedWriter(fw); 

     List<String> lines = Files.readAllLines(Paths.get(selectedFile.toString()), 
       Charset.defaultCharset()); 
     for (String line : lines) { 
      System.out.println(line); 
      System.out.println(AESencrp.encrypt(line)); 

      /*file is cleared regardless of whether or not these are commented out or 
      * not, as long as I create the new FileWriter and BufferedWriter the file 
      * is cleared regardless.*/ 

      //bw.write(AESencrp.encrypt(line)); 
      //bw.close(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

AESencrp.encrypt只是一個加密類,我不會影響它。如果我創建了一個新的FileWriter和BufferedWriter,那麼這個循環甚至不會運行(至少我不這麼認爲,因爲我沒有得到線的加密或打印文件的原始內容,如果我沒有'牛逼創建新的FileWriter /的BufferedWriter。)

 for (String line : lines) { 
      System.out.println(line); 
      System.out.println(AESencrp.encrypt(line)); 

      /*file is cleared regardless of whether or not these are commented out or 
      * not, as long as I create the new FileWriter and BufferedWriter the file 
      * is cleared regardless.*/ 

      //bw.write(AESencrp.encrypt(line)); 
      //bw.close(); 
     } 

回答

3

這是因爲FileWriter構造您所使用截斷該文件,如果它已經存在。

如果你想將數據追加而是使用:

new FileWriter(theFile, true); 
0

你打開它寫(以追加方式使用帶有附加選項的構造函數)。你期望還有什麼應該發生? 進一步你outcommented close()是在錯誤的地方。它應該在循環之外。

2

這聽起來像你想追加到文件,而不是覆蓋它。使用正確的FileWriter constructor that takes a boolean on whether to append

FileWriter fw = new FileWriter(selectedFile.getAbsoluteFile(), true); 

您正在使用的構造,沒有boolean,默認爲「覆蓋」模式。只要您以覆蓋模式創建FileWriter,它就會清除該文件,以便從頭開始寫入。

作爲第二個參數傳遞true將允許您追加而不是覆蓋。

相關問題