【发布时间】:2017-08-12 19:20:13
【问题描述】:
我正在使用 bufferedWriter 和 FileWriter 将记录器写入我的 java 程序(csv 格式)。
当我在程序运行时打开 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();
}
}
现在我的回答是,不关闭流而只使用flush是否可以? 以后会不会有问题?因为在我所有的测试中它都运行良好。
谢谢!!
【问题讨论】:
-
请出示完整的minimal reproducible example;你错过了很多重要的方面。对于初学者来说;我猜你正在使用 FileWriter 创建你的 BufferedWriter;那么你到底为什么要在这两个上调用方法(你只需要刷新/关闭外部编写器!)
-
@GhostCat - 我添加了。
-
应该作为 DUP 关闭到stackoverflow.com/questions/16584777/… ... 答案是正确的:这段代码真的...对不起,不好。
-
@GhostCat - 为什么不好?我只是创建一个文件并写信给他。我还能做些什么更好?我只是想解决有人在程序仍在运行时打开文件的问题......
-
我在那个聊天室里放了一些内容;愉快地消化……然后告诉我你的想法。
标签: java file flush filewriter