0

我在运行我的 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)

任何帮助,将不胜感激!

4

2 回答 2

2

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

读取文件时:

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

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

当你这样做时,(line=bin.readLine()).startsWith(..)你实际上尝试在这种情况下调用startsWith()on null- 因此是错误。

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

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

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

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


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

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

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

于 2012-10-18T23:36:40.107 回答
0

在 catch(Execption e) 中替换

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

经过

e.printStackTrace();

这显示了行错误。

于 2012-10-18T23:44:23.040 回答