我正在编写一个方法,它接收List
个Status
个对象作为参数,打开一个包含String
推文表示的日志文件,检查是否有任何String
1}} 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;
}
答案 0 :(得分:0)
我在这里写了一些关于你的代码的想法。
请务必关闭对象Reader
和Writer
。
查看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);
而且,我认为这是一个不好的做法,写在您正在阅读的同一个档案中。
如果你没有特定的约束,我建议写一个不同的文件。
但如果你真的想要这种行为,那么很少有替代方案。
Files.move(from, to)
将其移至旧文件。