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