Java 在文件末尾写入

Java 在文件末尾写入,java,file,Java,File,我想在文件中写一个列表的内容。代码很容易理解,有时可以完成这项工作。但大多数时候它都失败了。这就是我迄今为止所尝试的: public void finishTheTest(String outputFileName) throws FileNotFoundException{ StringBuilder testOutPutStringBuilder = new StringBuilder(); if(!isFieldSuccessFull) {

我想在文件中写一个列表的内容。代码很容易理解,有时可以完成这项工作。但大多数时候它都失败了。这就是我迄今为止所尝试的:

public void finishTheTest(String outputFileName) throws FileNotFoundException{
        StringBuilder testOutPutStringBuilder = new StringBuilder();

            if(!isFieldSuccessFull) {
                testOutPutStringBuilder.append(System.getProperty("line.separator"));
                testOutPutStringBuilder.append(System.getProperty("line.separator"));
                testOutPutStringBuilder.append("Error for Task  -> " + tm.getFieldHM(tm.getKey()));
                testOutPutStringBuilder.append(System.getProperty("line.separator"));
                testOutPutStringBuilder.append("*****************************************");
                testOutPutStringBuilder.append(System.getProperty("line.separator"));
                for(String str : listFailure) {
                    testOutPutStringBuilder.append(str);
                    testOutPutStringBuilder.append(System.getProperty("line.separator"));
                }
                testOutPutStringBuilder.append("*****************************************");
                testOutPutStringBuilder.append(System.getProperty("line.separator"));
            }
            if(!isCinematicSuccessFull) {
                testOutPutStringBuilder.append(System.getProperty("line.separator"));
                testOutPutStringBuilder.append(System.getProperty("line.separator"));
                testOutPutStringBuilder.append("Error for Repository -> " + tm.getFieldHM(tm.getKey()));
                testOutPutStringBuilder.append(System.getProperty("line.separator"));
                testOutPutStringBuilder.append("*****************************************");
                testOutPutStringBuilder.append(System.getProperty("line.separator"));
                testOutPutStringBuilder.append("Cinematic error.");
                testOutPutStringBuilder.append(System.getProperty("line.separator"));
                testOutPutStringBuilder.append("*****************************************");
                testOutPutStringBuilder.append(System.getProperty("line.separator"));
            }
            try(PrintStream ps = new PrintStream( new FileOutputStream(outputFileName, true))) {
                System.out.println(testOutPutStringBuilder);
            ps.println(testOutPutStringBuilder.toString());
        }
我正在浏览字符串列表以构建StringBuilder,或者只是将字符串附加到StringBuilder。然后我在标准输出上打印它,它正在工作,然后我在指定的文件中打印它。该文件已创建,但大多数情况下,即使在代码执行之后,它仍保持为空。因为我在创建FileOutputStream时指定了true,所以我希望文本只需添加到文件的末尾。但是当我多次运行代码时,文件中就什么都没有了


有什么我遗漏的吗?

您正在使用try-with-resources,这就留下了隐藏异常的可能性:

如果你看看这里被接受的答案

您可以添加一个catch块来查看是否发生了您丢失的异常

您可以暂时将代码更改为以下内容:

public void finishTheTest(String outputFileName) throws Exception {
  ...
  try(PrintStream ps = new PrintStream( new FileOutputStream(outputFileName, true))) {
    System.out.println(testOutPutStringBuilder);
    ps.println(testOutPutStringBuilder.toString());
  }
  catch (Exception e) {
    System.out.println("Error in writing to file:");
    e.printStackTrace();
    throw e;        
  }
  ...
}

然后,如果您的尝试引发异常,您将看到任何异常。

我找到了解决问题的方法。不要使用此命令写入我的文件:

try(PrintStream ps = new PrintStream( new FileOutputStream(outputFileName, true))) {
            ps.println(testOutPutStringBuilder.toString());
}
我用这个:

try(PrintWriter ps = new PrintWriter( new BufferedWriter(new FileWriter(outputFileName, true)))) {
            ps.println(testOutPutStringBuilder.toString());

        }

从现在起,这种方法每次都有效。我仍然不知道其他代码出了什么问题。

是否引发了异常?不,没有异常。您是否检查testOutPutStringBuilder.toString.isEmpty是否为真?是的,当我将sysout放在标准输出上时,我会检查。在我的计算机中,您的代码运行没有任何问题。你能提供更多的信息吗?例如第一次输入、第二次输入等等……我刚刚阅读了文档中关于被抑制异常的部分。据我所知,如果块抛出了多个异常,那么只会抛出一个异常。我不认为我是那种人,因为我没有任何例外被解雇。