0

我正在尝试从文件创建一个列表,然后在我的主类中使用该列表。

这是我的错误:

Exception in thread "main" java.lang.NullPointerException
at Read.ReadFile(Read.java:18)
at Main.main(Main.java:6)

这是我的代码:

import java.util.*;

public class Main {
    public static void main(String args[]){

        List<Integer> a = (new Read()).ReadFile();

        Read z = new Read();
        z.OpenFile();
        z.ReadFile();
        z.CloseFile();
        System.out.println(a);

    }
}

而另一类:

import java.util.*;
import java.io.*;

public class Read {
    private Scanner x;

    public void OpenFile(){
        try{
            x = new Scanner(new File("numbers.txt"));
        }
        catch(Exception e){
            System.out.println("ERROR");
        }
    }

    public List<Integer> ReadFile(){
        List<Integer> a = new ArrayList<Integer>();
        while(x.hasNextInt()){
            a.add(x.nextInt());
        }
        return a;
    }

    public void CloseFile(){
        x.close();
    }
}

这是我的文本文件:

1 2 3 4 5 6 7 8 9

我希望有一个人可以帮助我。附言。我正在学习自己编程,英语不是我的第一语言,所以如果有初学者的错误,我很抱歉。

4

3 回答 3

2
List<Integer> a = (new Read()).ReadFile();

ReadFile();在打开文件之前调用这里。因此,x将为 null 并导致NullPointerException.

解决此问题的一种方法是:

ArrayList<>在类内移动Read并添加get方法。

于 2013-06-17T18:50:31.797 回答
1

你的语句序列应该是这样的:

    Read z = new Read();// instantiate the reader
    z.OpenFile(); //open the file
    List<Integer> a = z.ReadFile(); //read and hold the values in array
    z.CloseFile(); //close the file
    System.out.println(a); //print the values

不需要第一个声明。获取阅读器,打开文件,读取值,关闭文件,然后打印值。

于 2013-06-17T18:52:59.207 回答
0

在以下行中,您创建了一个新的 Read 实例并立即调用 ReadFile(),而不是首先使用 OpenFile() 创建 Scanner 对象:

    List<Integer> a = (new Read()).ReadFile();
于 2013-06-17T18:55:15.067 回答