-4
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);
        } 

    }
}

这段代码有什么问题?

我初始化了数组,但它没有运行!

更新 1

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
4

4 回答 4

0

很难理解在哪一行抛出异常,但我猜在这些:

x = Integer.parseInt(str[1]);
y = Double.parseDouble(str[2]);

在解析之前检查 ifstr[1]str[2]is not null

于 2012-06-17T19:37:12.413 回答
0

我认为的问题是

你有 5 行或更少的行,saved.txt因为第 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);
}

如果您还有任何问题,请告诉我。

更新 1

根据您的更新,

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.

另请阅读如何在 Java 中打印文件内容

于 2012-06-17T19:38:05.953 回答
0

你有一个while检查是否line为空的循环,它不是这样 while 循环运行,但是你有一个 for 循环调用line = input.readLine();6 次,并且从不检查它是否为空。在某些时候,line可能为 null,因为您已到达文件末尾。您需要检查linefor 循环内是否为 null 或以不同的方式计算循环。

于 2012-06-17T19:39:01.663 回答
0

您的问题在于这两行代码:

line = input.readLine();
str = line.split("[-]");

首先,您从文件中读取一行。您假设该文件至少有 6 行,这显然是一个错误的假设。如果已到达流的末尾,则BufferedReader#readLine返回。您不检查是否为空,而是调用导致 NPE 的空对象。null linesplit

于 2012-06-17T19:39:10.057 回答