Java 正在写入文件:IOException:流已关闭

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

我很难弄清楚为什么我的代码会出现上述错误。每次调用该方法时,我都会创建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();
            }
        }
    }
}

任何帮助都将不胜感激。

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);) {

请显示完整的堆栈跟踪,包括您发布的代码中哪一行引发异常的指示。