【发布时间】:2017-03-19 08:28:00
【问题描述】:
我正在为我的 java 程序编写一个记录器(以 csv 格式)。 记录器工作正常,但我遇到了一个问题。
当我尝试写入文件并同时打开文件时程序会崩溃,这听起来很合乎逻辑。 当我这样做时,我得到了那个异常:“该进程无法访问该文件,因为它正在被另一个进程使用”。
我的问题是,即使有人打开了文件,是否还能继续写?
谢谢。
更新:
我想我解决了这个问题。 每次写入文件后(使用 bufferedWriter 和 FileWriter),我都会调用一个 close() 函数来关闭 bufferedWriter 和 FileWriter。
我更改了 close() 函数: 1.新增fileChannel和FileLock。 2. 忽略 bw.close();
不关闭bufferWriter(bw)可以吗,以后会不会有什么问题?
private void close() throws IOException {
RandomAccessFile rf;
rf = new RandomAccessFile(file, "rw");
fileChannel = rf.getChannel();
lock = fileChannel.lock();
try {
if (bw != null) {
// bw.close(); The line i ignored.
bw = null;
}
if (fw != null) {
fw.close();
fw = null;
}
} catch (IOException ex) {
ex.printStackTrace();
}
lock.release();
}
更新 2: 现在我发现如果我将功能更改为那个(关闭更改为刷新),它的工作原理:
private void close() {
try {
if (bw != null) {
bw.flush();
bw = null;
}
if (fw != null) {
fw.flush();
fw = null;
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
最好的选择是什么?
【问题讨论】:
-
请出示您的代码。