从文件读取时出现NullPointerException

时间:2012-10-18 23:27:41

标签: java exception pointers null

运行我的Java程序时遇到java.lang.NullPointerException错误,在阅读之后我想我明白了错误的含义,但我仍然不确定如何修复它。

import java.util.ArrayList;
import java.io.FileInputStream;
import java.io.DataInputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.PrintStream;
public class readFile {


public static ArrayList<String> pullFirst(String fileName) throws IOException{
    String filen = "C:\\Users\\Steven\\Desktop\\Tests\\wunderground\\outputTweetsWeather.txt";
    ArrayList<String> arl = new ArrayList<String>(); // java 6 ArrayList 

    FileInputStream fs = new FileInputStream(filen); // this is how you access a file in java
    DataInputStream din = new DataInputStream(fs);
    BufferedReader bin = new BufferedReader(new InputStreamReader(din));

    String line;    
    while(!(line = bin.readLine()).startsWith("String index out of range")){ // read each line in the file while they exist
        arl.add(line);                // add them to the array list
    }

    return arl;                                  // return the array list
}

public static void main(String[] args, int j) {

    // this is just demo code to prove it works so you can check the output.
    try{
    ArrayList<String> rVal = pullFirst("testFile.txt");
        for(String a : rVal){
            //System.out.println(a + "\n"); // insert write to file code here
           if(a.startsWith("+t")){
       //          System.out.println(a);
           }
        }
        int i = 36;


        PrintStream out5 = new PrintStream(new FileOutputStream("forpopUp1.txt", true));

        System.setOut(out5);
     System.out.println(rVal.get(2 + j*i)); // Display Value


    }catch(Exception e){
        System.out.print("Problem in readFile" + e);
    }

}
}

现在我不确定这是否与我的主线是

的事实有关
public static void main(String[] args, int j) {

但是,据我所知,我必须这样做,因为这个类在运行来自另一个类的if条件后执行,使用行

readFile.main(args, counterForreadFile);

这是StackTrace的结果:

java.lang.NullPointerException
at readFile.pullFirst(readFile.java:22)
at readFile.main(readFile.java:33)

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

我相信错误是您阅读的文件已用完:

在阅读文件时:

while(!(line = bin.readLine()).startsWith("String index out of range")){ 
  ...
}

当文件用尽时,BufferedReader将返回null

执行(line=bin.readLine()).startsWith(..)时,在这种情况下,您实际上会尝试在startsWith()上调用null,从而导致错误。

要解决此问题,您应该迭代为:

while ((line = bin.readLine()) != null) { 
  if (line.startsWith("String index out of range")) break; 
  //rest of the code
}

当读者筋疲力尽时,这为您提供null安全。

虽然这绝对是一个问题 - 但在你提供完整的堆栈跟踪之前,我无法确定这是你遇到的确切问题。


P.S。正如我在评论中已经说过的那样 - 获取堆栈跟踪(提供有关该问题的更多信息),您可以添加到catch块,所以它将是这样的:

}catch(Exception e){
    System.out.print("Problem in readFile" + e);
    e.printStackTrace();
}

另一种方法是将main()声明为throws Exception,并删除catch块(以及try块)。

答案 1 :(得分:0)

在catch(例外e)中替换

System.out.print("Problem in readFile" + e);

通过

e.printStackTrace();

这会显示行错误。