我正在尝试从文件创建列表,然后在我的主类中使用该列表。
这是我的错误:
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。我正在学习自己编程,英语不是我的第一语言所以如果有初学者的错误我很抱歉。
答案 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();