java - BufferedReader 无明显原因返回 Null

标签 java nullpointerexception bufferedreader fileinputstream

提前感谢您的帮助。我对 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/

相关文章:

java - Hadoop 的单词百分比程序

java - 即使 hashcode() 相同,HashMap<Node, Integer> get 也会返回 null

java - 如何从控制台接受用户数据

java - CSV 文件无法更新

java - 使用 Contains 方法过滤输入的多个不同行

java - maven父子多模块项目

java - Android 中的 OpenNLP 在尝试初始化 posModel 时出现 FileNotFoundException

java - 如何创建具有外部资源配置的 uber-jar

java - 设置可见性上的三星 G5 空指针异常

java - 无法解决线程 "AWT-EventQueue-0"java.lang.NullPointerException 中的异常