读取文本文件并将其存储在arraylist中的空指针错误

时间:2013-12-03 19:22:27

标签: java arraylist text-files filereader

我也为它编写了一个主要的方法,但我无法告诉错误的来源。这是我正在使用的代码:

import java.io.*;
import java.util.*;
 public class WordList{
  private ArrayList<String> words;

 public WordList(String filename){
ArrayList<String> words = new ArrayList<String>();
}

public ArrayList<String> openFile(String filename) throws IOException{
FileReader fr= new FileReader(filename);
//create a Filereader object
BufferedReader textReader= new BufferedReader(fr);
//create a BR object
String line = textReader.readLine();
while (textReader.readLine() != null){
  words.add(line);
  textReader.readLine();
}
textReader.close();
return words;
}
Random r= new Random();
public String getRandomWord(){
String x= new String();
int y=r.nextInt(words.size());
x= words.get(y);
return x;

 }
}

这是我用来测试代码的主要方法:

import java.io.*;
import java.util.*;
 public class Test{
  public void main(String args[])throws IOException{
 String path= "C:/Users/Cyril/Desktop/COMP 202/Assignment 4/Text files/Majors.txt" ;

 try {
WordList list = new WordList(path);
ArrayList<String> majors = new ArrayList<String>();
majors = list.openFile(path);
System.out.println(majors);
}

catch (IOException e){
  System.out.println( e.getMessage());
  }
 }
}

我收到空指针错误。我找不到它的来源。 我的问题是:

使用私有arraylist编写一个类WordList,该arraylist读取文本文件并将每一行存储为arraylist中的条目。 我添加了随机方法来生成arraylist中的随机单词。

4 个答案:

答案 0 :(得分:3)

您已声明了一个隐藏实例成员的局部变量

public WordList(String filename){
    ArrayList<String> words = new ArrayList<String>();
}

更改为

public WordList(String filename){
    words = new ArrayList<String>();
}

But also see Kugathasan's answer...which they just deleted.

此代码段

String line = textReader.readLine();
while (textReader.readLine() != null){
    words.add(line);
    textReader.readLine();
}

您正在从输入流中读取3行。这就是你想要的吗?

答案 1 :(得分:0)

您在构造函数中声明一个与实例变量同名的局部变量,而不是分配实例变量。
因此,在构造函数中将声明更改为赋值,就像这样。

public WordList(String filename){
   words = new ArrayList<String>();
}

答案 2 :(得分:0)

更改

public WordList(String filename) {
    ArrayList<String> words = new ArrayList<String>();
}

  public WordList(String filename) {
     words = new ArrayList<String>();
}

由于您已在构造函数中隐藏了实例成员words,因此words未初始化,默认为nullnull.SomethingNullPointerException

答案 3 :(得分:0)

private ArrayList<String> words;

public WordList(String filename){
ArrayList<String> words = new ArrayList<String>();
}

在代码的这一部分中,构造函数正在创建另一个数组列表,而类中的一个(实例变量)没有链接到它。

请将您的代码更改为:

private ArrayList<String> words;

public WordList(String filename){
this.words = new ArrayList<String>();
}

它应该起作用:))