Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hashmap中的NullPointerException错误_Java_Arraylist_Nullpointerexception_Hashmap_Null Pointer - Fatal编程技术网

Java Hashmap中的NullPointerException错误

Java Hashmap中的NullPointerException错误,java,arraylist,nullpointerexception,hashmap,null-pointer,Java,Arraylist,Nullpointerexception,Hashmap,Null Pointer,我在代码的这一部分上花了无数个小时,它给了我一个空指针异常。我不明白为什么会发生这种情况,也不知道如何阻止它。我已经尝试了以前在stackoverflow上发布的所有方法。下面是读取数据文件并将每一行放入hashmap的函数 public ArrayList<HashMap<String, String>> readDataFromFile(){ this.openFileForReading(); ArrayList<HashMap<Stri

我在代码的这一部分上花了无数个小时,它给了我一个空指针异常。我不明白为什么会发生这种情况,也不知道如何阻止它。我已经尝试了以前在stackoverflow上发布的所有方法。下面是读取数据文件并将每一行放入hashmap的函数

public ArrayList<HashMap<String, String>> readDataFromFile(){
    this.openFileForReading();
    ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>();
    try{
        String line;

        while ((line = this.reader.readLine()) != null){ 

            while (!(line.equals(""))){

                if (line.equals("[type = book]")){
                    HashMap<String, String> data= new HashMap<>();
                    line = this.reader.readLine();

                    while (!(line.equals(""))){<----this is where the null exception error is

                        String tokens[] = line.split("=");
                        data.put(tokens[0], tokens[1]);
                        System.out.println(tokens[0] + " " + tokens[1]);
                        line = this.reader.readLine();

                    }
                   list.add(data);
                }
                else{
                    break;
                }
            }

        }
    }
    catch (IOException exception) {
        list = null;
        System.err.println("(FileIO): " + exception);            
    }
    // Close the file when we have finished reading or if an error occurs
    finally {
        try {
            this.reader.close();                
        } catch (IOException exception) {
            System.err.println("(FileIO): " + exception);
        }
    }

    return list;
}
电话号码�QA76.73.J38S265� 作者�沃尔特·萨维奇,肯里奇·莫克� 标题�绝对Java� 出版商�出版商� 年�2009� 电话号码�P98.C6116� 标题�计算语言学� 线程“main”java.lang.NullPointerException中出现异常 组织机构�计算语言学协会� 在librarysearch.FileIO.readDataFromFile(FileIO.java:160) 年�2008� 位于librarysearch.FileIO.main(FileIO.java:405) Java结果:1 生成成功(总时间:1秒)


我在发生错误的代码中编写了代码。为什么会这样?我不明白,如果萨维有人能帮忙,我将不胜感激。

您正在使用一条新线路,但没有检查空值:

 HashMap<String, String> data= new HashMap<>();
 line = this.reader.readLine(); <--- i mean this, and line can be null

 while (!(line.equals(""))){<----this is where the null exception error is
但是总是像这样:

if ("my literal which is never null".equals(myStringWhichCanBeNull)) // ...
在许多情况下,您将避免NPE,并拥有更健壮的代码


(我并不是说在这种情况下,这挽救了您的生命…

您正在使用一条新行,但没有检查null:

 HashMap<String, String> data= new HashMap<>();
 line = this.reader.readLine(); <--- i mean this, and line can be null

 while (!(line.equals(""))){<----this is where the null exception error is
但是总是像这样:

if ("my literal which is never null".equals(myStringWhichCanBeNull)) // ...
在许多情况下,您将避免NPE,并拥有更健壮的代码

(我并不是说在这种情况下这救了你的命…)

您正在读取一行,然后在调用
equals()
之前不要检查它是否为null。如
readLine()
方法的javadoc所述,如果文件中不再有任何内容可读取,则该值将为null

 line = this.reader.readLine();
您正在读取一行,然后在调用
equals()
之前不要检查它是否为null。如
readLine()
方法的javadoc所述,如果文件中不再有任何内容可读取,则该值将为null

 line = this.reader.readLine();
第13行可能返回null(有些人不走运)

然后你打电话给我,平等对待

因此,也许可以添加更多的错误检查

第13行可能返回null(有些人不走运)

然后你打电话给我,平等对待


因此,可能需要添加更多的错误检查

您需要在调用该方法的任何地方检查null的结果。正如Java API文档所述,
BufferedReader.readLine()
返回:

包含行内容的字符串,不包括任何 行终止字符,如果流的结尾已被删除,则为null 达到


外部循环检查null,但有其他嵌套循环,它们执行额外的读取,但不检查null。考虑重构代码和修改逻辑,因此只使用一个循环,而不是嵌套几个循环来执行RealLoad()操作。否则,您将需要添加更多的null检查,或者添加中断语句,或者修改循环条件,这可能会使代码更难阅读。

您需要在调用该方法的任何地方检查null的结果。正如Java API文档所述,
BufferedReader.readLine()
返回:

包含行内容的字符串,不包括任何 行终止字符,如果流的结尾已被删除,则为null 达到


外部循环检查null,但有其他嵌套循环,它们执行额外的读取,但不检查null。考虑重构代码和修改逻辑,因此只使用一个循环,而不是嵌套几个循环来执行RealLoad()操作。否则,您将需要添加更多的空检查,或者添加中断语句,或者修改循环条件,这可能会使代码更难阅读。

使用堆栈跟踪发布整个异常。发布完整的异常树首先要做的事情是:读取异常堆栈跟踪(如果无法理解,则发布)。错误消息旨在被读取。他们会告诉你问题所在。如果不阅读它们,你就是在自食其果,10秒钟内可以解决的问题需要花费数天时间才能解决。nvm我将编辑我的主要帖子尝试此
,而(!(“”.equals(line))
以避免NPE。使用堆栈跟踪发布整个异常。发布完整的异常树第一件事:读取异常堆栈跟踪(如果您不理解,也可以发布)。错误消息是用来阅读的。它们告诉您问题所在和位置。如果不阅读它们,您就是在自食其果,什么问题可以在10秒钟内解决需要几天时间才能解决。nvm我将编辑我的主要帖子此
,而(!(“”.equals(line)))
为了避免NPE。这很有效!有点。我在第行之前添加了一个while(line!=null)。等于(“),它现在不给出错误,但在第一个空行处停止。这很有效!有点。我在第行之前添加了一个while(line!=null)。等于(“),它现在不给出错误,但在第一个空行处停止
 line = this.reader.readLine();