写入文件:IOException:流关闭
问题描述:
我无法弄清楚为什么我的代码出现上述错误。每次调用方法时,我都会创建一个FileWriter和BufferedWriter的新实例,但显然该流已经关闭。写入文件:IOException:流关闭
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()
它,它在关闭它之前试图flush
底层目标Writer
。
在你的代码中,你调用close()
对目标FileWriter
调用close
BufferedWriter
。当BufferedWriter#close()
试图调用FileWriter
上的flush
时,该FileWriter
已关闭,从而引发异常。
您需要先关闭BufferedWriter
。更好的是,使用try-with-resources
try (FileWriter write = new FileWriter(spawns, true); BufferedWriter out = new BufferedWriter(write);) {
+0
感谢您的理解!我完全忘记了他们在关门时冲水,并且心不在焉地以错误的顺序关闭他们。再次感谢! – 2014-08-30 20:21:39
请显示完整的堆栈跟踪,包括指示您已发布代码中的哪一行引发异常。 – 2014-08-30 20:09:23