我正在使用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();
}
}
现在我的回答是,如果可以不关闭流并且只使用同花顺? 以后会有问题吗?因为在我的所有测试中它运行良好。
谢谢!
答案 0 :(得分:1)
这是不是很诚实?,以一种非常卑微的方式。对不起但很臭的代码:
Is it necessary to close a FileWriter, provided it is written through a BufferedWriter?
答案 1 :(得分:0)
关闭#include <stdio.h>
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
#define lua_pushglobaltable(L) lua_pushvalue(L,LUA_GLOBALSINDEX)
int main(void)
{
lua_State *L=luaL_newstate();
luaL_openlibs(L);
lua_pushglobaltable(L);
lua_pushnil(L);
while (lua_next(L,-2) != 0) {
puts(lua_tostring(L,-2));
lua_pop(L,1);
}
lua_pop(L,1);
lua_close(L);
return 0;
}
对象。
bufferedWriter
说,你有一个很大的bw.close();
。
现在你要从文件中取出一些东西,每次都制作一个新的小文本文件。
在这种情况下,
不知何故,你必须编写一些代码行来确定何时完成特定文件的写入。然后使用标志编写bw.close();
最终,您必须初始化第二个文件并完成任务。然后是bw.close();
如果你不写fw.close(),那么该文件将为空。 所以,确保你必须写每个文件写入操作bw.close()