PrintWriter不使用FileOutputStream附加到Java中

时间:2015-04-07 19:35:05

标签: java append fileoutputstream filewriter printwriter

这是我写入文件的方法,这个方法属于一个类

public void write(FileOutputStream fo) throws IOException
    {
        PrintWriter out=new PrintWriter(fo);
        for (int i = 0; i < size; i++) {
            String formatted="%3d";
            for (int j=0;j<size;j++)
            {
                out.append(String.format(formatted,arr[i][j]));
            }
            out.append(System.getProperty("line.separator"));
        }
        out.append(System.getProperty("line.separator"));
        out.close();
    }

我想将结果写入许多不同的文件,对应于由适当创建的对象读取的输入文件,因此我将待写文件作为参数传递给此方法

它根本不附加

花了几个小时寻找这个问题的解决方案后,我只得到了使用PrintWriter附加指定文件路径的结果,例如:

PrintWriter out=new PrintWriter(new FileWriter("output1.txt",true));

如果我使用

PrintWriter out=new PrintWriter(new FileWriter(fo,true));

我遇到错误

当调用该对象的2个实例的write方法时,它不会追加

public void writeSolution() throws IOException
    {
        fo=new FileOutputStream("output\\output1.txt",true);
        start.write(fo);
        goal.write(fo);
        fo.close();
    }

请帮我解决这个问题

1 个答案:

答案 0 :(得分:0)

当您关闭PrintWriter时,close()方法也会关闭基础流/作家

每次拨打write方法时,都会打开PrintWriter,然后在结束时关闭它。这意味着流已关闭。下次打开PrintWriter时,它是一个已关闭的文件。您无法写入已关闭的文件。

当您执行此类操作时,PrintWriter不会抛出异常,因此它会默默地执行任何操作。并且您没有使用checkError()方法,因此您不知道那里有错误。

您应该做的是将PrintWriter声明为字段(以便在调用write()之间保持其状态,在开始调用write()方法之前将其打开,然后关闭在你最后一次调用write()方法之后它。记得检查错误。