2017-08-06 57 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つの異なるファイルハンドルが作成されます。私はそれが本当のOSだとは思っていないので、Windowsが何をしているのかわからないが、あなたのポストからは同じファイルハンドルを使用しているようだ。

関連する問題