从文件读取到列表

时间:2013-06-17 18:48:48

标签: java file list

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

这是我的错误:

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

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

3 个答案:

答案 0 :(得分:2)

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

在打开文件之前,您在此处调用ReadFile();。因此,x将为空,并生成NullPointerException

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

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

答案 1 :(得分: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

无需先发表声明。获取阅读器,打开文件,读取值,关闭文件,然后打印值。

答案 2 :(得分:0)

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

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