Java 正在写入文件:IOException:流已关闭
我很难弄清楚为什么我的代码会出现上述错误。每次调用该方法时,我都会创建FileWriter和BufferedWriter的一个新实例,但显然流已经关闭Java 正在写入文件:IOException:流已关闭,java,ioexception,filewriter,Java,Ioexception,Filewriter,我很难弄清楚为什么我的代码会出现上述错误。每次调用该方法时,我都会创建FileWriter和BufferedWriter的一个新实例,但显然流已经关闭 public static void addSpawn(Location spawn) { File spawns = new File("spawns.dat"); FileWriter write = null; BufferedWriter out = null; try { wr
public static void addSpawn(Location spawn)
{
File spawns = new File("spawns.dat");
FileWriter write = null;
BufferedWriter out = null;
try
{
write = new FileWriter(spawns, true);
out = new BufferedWriter(write);
out.write(locToStr(spawn));
out.newLine();
}
catch(Exception e)
{
System.out.println("Error writing spawn file: " + e.getMessage());
}
finally
{
if(write != null)
{
try
{
write.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
if(out != null)
{
try
{
out.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
任何帮助都将不胜感激。
BufferedWriter
包装目标Writer
。当您close()
it时,它会在关闭底层目标Writer
之前尝试flush
底层目标
在代码中,在调用BufferedWriter
上的close
之前,先在目标FileWriter
上调用close()
。当BufferedWriter#close()
尝试调用FileWriter
上的flush
时,该FileWriter
已关闭,因此引发异常
您需要先关闭BufferedWriter
。更好的方法是,使用尝试使用资源
try (FileWriter write = new FileWriter(spawns, true); BufferedWriter out = new BufferedWriter(write);) {
请显示完整的堆栈跟踪,包括您发布的代码中哪一行引发异常的指示。