Exception in thread "main" java.lang.NullPointerException
at Library.loadBooks(Library.java:179)
at UseLibrary.main(UseLibrary.java:105)
这个错误让我发疯了!
public void loadBooks(String s) throws IOException{
String str[] = new String[6];
String inFName = ".//" + s ;
BufferedReader input = new BufferedReader(new FileReader(inFName));
int x;
double y;
String line = "";
while(line != null){
for(int i=0; i<6; i++){
str[i] = new String();
line = input.readLine();
str = line.split("[-]");
x = Integer.parseInt(str[1]);
y = Double.parseDouble(str[2]);
Book a = new Book(str[0], x, y, str[3], str[4], str[5]);
add(a);
}
}
}
此代码有什么问题?
我初始化数组,但它没有运行!
在save.txt
我有
1 Don Knuth-290-23.45-The Art of Programming with Java-HG456-Engineering-5
2 A. Camp-400-13.45-An Open Life-HSA234-Philosophy-1
3 James Jones-140-12.11-Oh, Java Yeah!-SDF213-Science Fiction-2
4 J. Campbell-250-32.45-An Open Life-JH45-Science-3
5 Mary Kennedy-230-56.32-Intro to CS Using Java as the Language-USN123-Science-4
答案 0 :(得分:0)
很难理解抛出Exception的行,但我猜这些:
x = Integer.parseInt(str[1]);
y = Double.parseDouble(str[2]);
在解析之前检查str[1]
和str[2]
是否不是null
。
答案 1 :(得分:0)
您的saved.txt
中有5行或更少的行,并且由于第6次迭代的for循环,因为没有行的数据,您将获得NullPointerException
。
请按照以下步骤告诉我你得到的内容......
while(line != null){
for(int i=0; i<6; i++){
str[i] = new String();
line = input.readLine();
str = line.split("[-]");
x = Integer.parseInt(str[1]);
y = Double.parseDouble(str[2]);
Book a = new Book(str[0], x, y, str[3], str[4], str[5]);
add(a);
}
}
while ((line = input.readLine()) != null) {
str = line.split("[-]");
Book a = new Book(str[0], Integer.parseInt(str[1]), Double.parseDouble(str[2]), str[3], str[4], str[5]);
add(a);
}
如果您仍然遇到任何问题,请告诉我。
根据您的更新,
在save.txt
我有
1 Don Knuth-290-23.45-The Art of Programming with Java-HG456-Engineering-5
2 A. Camp-400-13.45-An Open Life-HSA234-Philosophy-1
3 James Jones-140-12.11-Oh, Java Yeah!-SDF213-Science Fiction-2
4 J. Campbell-250-32.45-An Open Life-JH45-Science-3
5 Mary Kennedy-230-56.32-Intro to CS Using Java as the Language-USN123-Science-4
如您所见,您的文件中有5行,对于第6次迭代,您将获得NullPointerException
。
答案 2 :(得分:0)
你有一个while
循环检查line
是否为空,不是这样,while循环运行,但是你有一个调用line = input.readLine();
的for循环,6次,并且永远不会检查它是否为null。在某些时候,line
可能为null,因为您已到达文件的末尾。您需要在for循环中检查line
是否为null,或者以不同的方式计算循环。
答案 3 :(得分:0)
您的问题在于以下两行代码:
line = input.readLine();
str = line.split("[-]");
首先,您从文件中读取一行。您假设该文件至少有6行,这显然是错误的假设。如果已到达流的末尾,则BufferedReader#readLine
会返回null
。您不检查line
是否为空,并且在空对象上调用导致NPE的split
。