我正在用bufferedWriter和FileWriter將一個記錄器寫入我的java程序(採用csv格式)。在java中寫入文件 - 關閉或刷新
當我在程序運行時打開csv文件並繼續寫入文件時,出現以下異常:「進程無法訪問該文件,因爲它正在被另一進程使用」。
我想要的是,當我在程序運行時打開csv文件時,csv文件將以讀取模式打開,程序將成功寫入文件。
我解決它通過改變的BufferedWriter和FileWriter的的閉合到.flush()代替.close()
原始最小記錄器的代碼(與原來的關閉功能)
public class logger {
private BufferedWriter bw = null;
private FileWriter fw = null;
private File file = null;
logger(String nclass) {
path = "c:\\test\\test.csv";
this.file = new File(path);
// Check if the file is already exist.
if (!file.exists()) {
file.createNewFile();
}
fw = new FileWriter(file.getAbsoluteFile(), true);
bw = new BufferedWriter(fw);
}
public void writeToFile(String msg) {
entryWrite();
try {
fw = new FileWriter(file.getAbsoluteFile(), true);
bw = new BufferedWriter(fw);
fw.append(msg);
} catch (IOException e) {
e.printStackTrace();
} finally {
close();
exitWrite();
}
}
}
private void close() {
try {
if (bw != null) {
bw.close();
bw = null;
}
if (fw != null) {
fw.close();
fw = null;
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
我的解決方案功能
private void close() {
try {
if (bw != null) {
bw.flush();
bw = null;
}
if (fw != null) {
fw.flush();
fw = null;
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
現在,我的回答是,如果它是確定不關閉流,只是沖水使用? 以後會有什麼問題嗎?因爲在我所有的測試中它運行良好。
謝謝!
請顯示完整[mcve];你錯過了很多重要的方面。對於初學者來說,我猜你正在使用FileWriter創建你的BufferedWriter;所以你爲什麼要在這兩種方法上調用方法(你只需要刷新/關閉外部作者!) – GhostCat
@GhostCat - 我已添加。 – Idon89
應該關閉爲DUP http://stackoverflow.com/questions/16584777/is-it-necessary-to-close-a-filewriter-provided-it-is-written-through-a-buffered ...和答案是現貨:這段代碼真的......對不起,不好。 – GhostCat