写入文件:IOException:流已关闭

Mic*_*ift 2 java ioexception filewriter

我无法弄清楚为什么我的代码会出现上述错误。每次调用该方法时,我都会创建 FileWriter 和 BufferedWriter 的新实例,但显然流已经关闭。

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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

Sot*_*lis 6

BufferedWriter包裹一个目标Writer。当您close()执行此操作时,它会在关闭目标之前尝试访问flush基础目标Writer

在您的代码中,您先调用close()目标FileWriter,然后close再调用BufferedWriter. 当BufferedWriter#close()尝试调用flushFileWriter,它FileWriter已经关闭并因此引发异常。

你会想先关闭BufferedWriter。更好的是,使用try-with-resources

try (FileWriter write = new FileWriter(spawns, true); BufferedWriter out = new BufferedWriter(write);) {
Run Code Online (Sandbox Code Playgroud)