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;
}
我在这里写了一些想法,看着你的代码。
记得始终关闭对象 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)
将其移动到旧文件。
我正在编写一个方法,它将 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;
}
我在这里写了一些想法,看着你的代码。
记得始终关闭对象 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)
将其移动到旧文件。