提前感谢您的帮助。我对 Java 还很陌生,没有接受过任何正式的 Java 教育。我正在制作 Minecraft Bukkit 服务器用于练习,并在创建时将标志位置记录到文件中。我正在尝试创建一个 boolean 值,如果该位置已在文件中,则返回 true,如果不在文件中,则返回 false。我不能使用 while 循环,否则它会卡住服务器,所以我使用 for 循环。不管怎样,BufferedReader 返回的所有行都是空的,我不知道为什么。我有一个整数,它使用 BufferedReader 返回文件中的行数,效果很好。我不明白为什么它用 boolean 值返回空。这是 boolean 值:
代码块:
private boolean isDuplicate(String in) throws IOException
{
File f = file;
try {
fr = new FileReader(f);
br = new BufferedReader(fr);
} catch (FileNotFoundException e1) {
log(Level.WARNING, "File not found.");
}
String temp;
in = in.substring(0,in.length() - 1);
for(int i = 0; i < (countLines(f)); i++)
{
if((temp = br.readLine()) != null)
{
String s = temp;
log(temp);
}
}
return false;
}
这是整数:
private int countLines(File f){
try {
fr = new FileReader(f);
br = new BufferedReader(fr);
} catch (FileNotFoundException e1) {
log(Level.WARNING, "File not found!");
}
for(int i = 0; i < 100000; i++)
{
try
{
if(br.readLine() == null)
{
return i;
}
}
catch (NullPointerException e)
{
return i;
}
catch (IOException e)
{
}
}
return 0;
}
最佳答案
“明显的原因”是您已到达文件末尾。但这段代码是无稽之谈。您根本不需要提前计算行数,而且您当然也不需要每次循环时都对它们进行计数,而这正是当前代码所做的。目前你的处理速度是O(N2),这是灾难性的。只需调用 readLine()
直到返回 null:
while ((line = br.readLine()) != null)
{
// ...
log(line);
}
注意,您的 isDuplicate()
方法不可能执行任何与其名称略有相似的操作。
关于java - BufferedReader 无明显原因返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22241966/