BufferedReader rea = new BufferedReader(new FileReader("points.txt"));
BufferedWriter writ = new BufferedWriter(new FileWriter("points.txt"));
ArrayList<String> top = new ArrayList<String>();
// checking if file is empty, so it enters imaginary players and scores
// if it is.
if (rea.readLine() == null) {
for (int i = 1; i < 6; i++) {
writ.write("Player" + i + "\t\t" + "99:99");
writ.newLine();
}
}
while ((readthis = rea.readLine()) != null) {
top.add(readthis);
}
所以会发生的是,即使我的文件“points.txt”已经有一些内部组成的玩家,它仍然会在第一个句子上返回true,因此新玩家会打印到文件中。但问题是,当我尝试在一段时间内读取文件时,它甚至都没有通过它。我已经检查过System.out.println()并发现它返回null。即使我看到它填写新数据,它怎么能返回null? 我究竟做错了什么?我现在正在努力解决这个问题大约一个半小时,尝试了我所知道的一切。 任何帮助非常感谢。
答案 0 :(得分:4)
通过使用new BufferedWriter(new FileWriter("points.txt"));
,您将覆盖以前的文件内容。如果要在现有文件末尾添加新内容,则需要使用带boolean append
参数的构造函数,如
new BufferedWriter(new FileWriter("points.txt"),true);
另外,不要忘记刷新/关闭读者/作者。
答案 1 :(得分:3)
此代码
BufferedWriter writ = new BufferedWriter(new FileWriter("points.txt"));
覆盖原始文件。
使用
BufferedWriter writ = new BufferedWriter(new FileWriter("points.txt"),true);
追加
答案 2 :(得分:0)
请理解使用BufferedReader / Writer同时读取和写入文件并不是一个好主意。
使用缓冲读卡器或写入器时,无法保证何时完成实际的读写操作。
话虽如此,一个解决方法是在到达文件末尾之前在阅读器上设置标记,并关闭(或至少刷新)输出流。这将强制BufferedWriter将内容实际写入文件系统,并允许读者阅读新内容。
注意:您可能会发现在某些文件系统上,此方法无效。
rea.mark(4048); // Set mark at beginning of file
if (rea.readLine() == null) {
for (int i = 1; i < 6; i++) {
writ.write("Player" + i + "\t\t" + "99:99");
writ.newLine();
}
writ.close();
rea.reset();
}
话虽如此,我认为更好的方法是检查文件之前的长度和存在尝试从中读取。请参阅下面的示例。
File file = new File("points.txt");
// checking if file is empty, so it enters imaginary players and scores
// if it is.'
if ((!file.exists()) || (file.length() == 0)) {
try (BufferedWriter writ = new BufferedWriter(new FileWriter(file))) {
for (int i = 1; i < 6; i++) {
writ.write("Player" + i + "\t\t" + "99:99");
writ.newLine();
}
}
// writ is closed by the try()
}
try (BufferedReader rea = new BufferedReader(new FileReader(file))) {
ArrayList<String> top = new ArrayList<String>();
String readthis;
while ((readthis = rea.readLine()) != null) {
top.add(readthis);
}
}
// rea is safely closed by the try()
将流创建放在try()块中,以便安全地清理它们。
我希望这会有所帮助。