2017-08-06 191 views
0

所以我使用這種方法寫入文件,它在Windows上完全正常工作,但是在Mac上運行時它會創建文件,但它們是空的。BufferedWriter在Windows上工作,但不能在Mac上工作

public static void writeLinesToTextFile(String path, String[] lines) { 
File file = new File(r + path); 
if (!file.exists()) { 
    try { 
     file.getParentFile().mkdirs(); 
     file.createNewFile(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

    BufferedWriter bw; 

    try { 

     bw = new BufferedWriter(new FileWriter(file.getPath())); 
     file.delete(); 
     file.createNewFile(); 

     for (int i = 0; i < lines.length; i++) { 
      //System.out.println(lines[i]); 
      bw.write(lines[i]); 
      bw.write(System.getProperty("line.separator")); 
     } 
     bw.flush(); 
     bw.close(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

我知道數據是正確的,因爲它打印正確。 感謝您的幫助,這真的讓我失望。

+0

而不是'bw.write(System.getProperty(「line.separator」))',你可以使用'bw.newLine()':https://docs.oracle.com/javase/8/docs/ api/java/io/BufferedWriter.html#newLine-- – Jeffrey

+0

僅供參考,我已編輯我的答案以添加此行爲的解釋。 –

回答

1

創建BufferedWriter後,請勿刪除file。在Linux中,每個文件都有一個唯一的文件句柄,所以刪除並重新創建具有相同路徑的文件會創建2個不同的文件句柄。我不知道Windows做了什麼,因爲我不認爲它是一個真正的操作系統,但從你的文章看來,它使用相同的文件句柄。

相關問題