写在文件的末尾

时间:2016-09-01 08:41:45

标签: java file

我想在文件中写入列表的内容。代码易于理解,有时可以完成工作。但大多数时候它失败了。这是我到目前为止所尝试的:

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());
        }

我正在浏览一个String列表来构建一个StringBuilder,或者我只是将String附加到StringBuilder。然后我在标准输出上打印它,它正在工作,然后我在指定的文件中打印它。该文件已创建,但大多数情况下即使在执行代码后它仍保持为空。因为我在创建FileOutputStream时指定了“true”,所以我希望文本只是在文件末尾添加。但是,当我不止一次运行代码时,文件中没有任何内容。

有什么东西我不见了吗?

2 个答案:

答案 0 :(得分:0)

您正在使用try-with-resources,这样就有可能禁止异常

https://docs.oracle.com/javase/8/docs/technotes/guides/language/try-with-resources.html

如果你看一下这里接受的答案

Do I have to close FileOutputStream which is wrapped by PrintStream?

您可以添加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()抛出任何异常,您将看到任何异常。

答案 1 :(得分:0)

我找到了解决问题的方法。而不是使用它来写入我的文件:

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

        }

现在每次都有效。我还是不知道其他代码出了什么问题。