Java 如何防止写入文件时覆盖输出?

Java 如何防止写入文件时覆盖输出?,java,file-io,io,Java,File Io,Io,对不起,标题很混乱。我尽量使它简明扼要。我从一个输入文件中读取,解析它,然后写入一个输出文件。我遇到的问题是,一旦程序完成运行,输出文件只包含从输入读取的最后一项。每个输入都被下一个输入覆盖。我认为我的问题在于这个代码段 protected void processLine(String aLine) throws IOException { Scanner scanner = new Scanner(aLine); scanner.useDelimiter(" "); i

对不起,标题很混乱。我尽量使它简明扼要。我从一个输入文件中读取,解析它,然后写入一个输出文件。我遇到的问题是,一旦程序完成运行,输出文件只包含从输入读取的最后一项。每个输入都被下一个输入覆盖。我认为我的问题在于这个代码段

 protected void processLine(String aLine) throws IOException {
   Scanner scanner = new Scanner(aLine);
   scanner.useDelimiter(" ");

   if (scanner.hasNext()){
     String input = scanner.next();

     PrintWriter writer = new PrintWriter(new FileWriter("output.txt"));
     writer.println(input);
     writer.close();     
    } else {
        System.out.println("Empty or invalid line. Unable to process.");
      }
   }

非常感谢所有帮助/建议。

只需添加true作为参数,即可在追加模式下打开文件

 PrintWriter writer = new PrintWriter(new FileWriter("output.txt",true));

追加模式确保在添加新内容时保留旧内容。参考

您可以在附加模式下打开文件,但最好不要每次循环都打开和关闭输出文件。开始前打开一次,完成后关闭。这将更有效率。

+1。我一直想知道这是否可能,但从未真正研究过。我没有意识到这就像在我的代码中添加一个
,true
那么简单