写入文件: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(); 
      } 
     } 
    } 
} 

任何帮助将不胜感激。

+0

请显示完整的堆栈跟踪,包括指示您已发布代码中的哪一行引发异常。 – 2014-08-30 20:09:23

BufferedWriter包装目标Writer。当你close()它,它在关闭它之前试图flush底层目标Writer

在你的代码中,你调用close()对目标FileWriter调用closeBufferedWriter。当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