运行我的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)
任何帮助将不胜感激!
答案 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();
这会显示行错误。