FileWriter 不附加到现有文件

FileWriter not appending to existing file

我正在编写一个方法,它将 List 个 Twitter Status 对象作为参数,打开一个包含 String 推文表示的日志文件,检查是否有任何String 对象的 Status 表示已经写入文件 - 如果是,它将从列表中删除它们,如果不是,它将 Status 附加到文件。

在我尝试写入文件之前一切正常。什么都没有写。我被引导相信这是由于在两个不同的地方打开文件的方法:new File("tweets.txt")new FileWriter("tweets.txt, true).

这是我的方法:

    private List<Status> removeDuplicates(List<Status> mentions) {
        File mentionsFile = new File("tweets.txt");
        try {
            mentionsFile.createNewFile();
        } catch (IOException e1) {
            // Print error + stacktrace
        }

        List<String> fileLines = new ArrayList<>(); 
        try {
            Scanner scanner = new Scanner(mentionsFile);
            while (scanner.hasNextLine()) {
                fileLines.add(scanner.nextLine());
            }
            scanner.close();
        } catch (FileNotFoundException e) {
            // Print error + stacktrace
        }

        List<Status> duplicates = new ArrayList<>();    
        for (Status mention : mentions) {
            String mentionString = "@" + mention.getUser().getScreenName() + " \"" + mention.getText() + "\" (" + mention.getCreatedAt() + "\")";
            if (fileLines.contains(mentionString)) {
                duplicates.add(mention);
            } else {
                try {
                    Writer writer = new BufferedWriter(new FileWriter("tweets.txt", true));
                    writer.write(mentionString);
                } catch (IOException e) {
                    // Print error + stacktrace
                }

            }
        }

        mentions.removeAll(duplicates);
        return mentions;
    }

我在这里写了一些想法,看着你的代码。

记得始终关闭对象 ReaderWriter

看看try-with-resources statement :

try (Writer writer = new BufferedWriter(new FileWriter("tweets.txt", true))) {
   writer.write(mentionString);
} catch (IOException e) {
   // Print error + stacktrace
}

读取整个文件 List<String>:

List<String> lines = Files.readAllLines(Paths.get("tweets.txt"), StandardCharsets.UTF_8);

再一次,我认为在您正在阅读的同一个文件中写入是一种不好的做法。

如果您没有特定的限制,我建议您写在不同的文件中。

但如果你真的想要这种行为,几乎没有其他选择。

  1. 创建一个临时文件作为输出,当您成功完成处理后,使用 Files.move(from, to) 将其移动到旧文件。