这是我正在处理的代码。它位于一个方法中,其目的是打开一个文件,检查内容,或缺少内容,并报告回来。
但是我在下面指出的那一行上得到NullPointerException
。
我不知道如何解决这个问题。我试过调试,这表明在行运行时String[]
的第一个元素包含文本,所以这不是问题。
int i = 0;
int numChar=1, numLines;
String[] line = new String[1000];
try {
BufferedReader in = new BufferedReader(new FileReader(file));
try {
while(numChar > 0) {
//String[] line = new String[1000];
line[i] = in.readLine();
PROBLEM--> numChar = line[1].length();
i++;
}
} catch (EOFException ex) {
JOptionPane.showMessageDialog( null, "Error" );
//break;
}
}
catch(IOException e) {
JOptionPane.showMessageDialog( null, "Missing file or no data to read." );
System.out.println("IO Error - Missing file");
}
答案 0 :(得分:2)
我怀疑你只需要更改数组访问索引以使用i
而不是1
。
numChar = line[i].length();
您还应检查null
BufferedReader
将返回(from the docs):
如果已到达流的末尾,则返回null
numChar = line[i] == null ? 0 : line[i].length;
你可能想要扩展它,这样就可以突破你的循环,而不是指定一个null的长度。
String s = in.readLine();
if (s == null) {
break;
}
else {
line[i] = s;
numChar = line[i++].length();
}
编辑以回应评论。
存在混淆问题的风险,我的偏好是重写你的循环。你似乎不需要循环外的numChars
,所以我会删除它以减少你的方法范围的变量。我还怀疑你不想停止阅读空行,只是在流的末尾:
while (true) { // for(;;) if you prefer
String s = in.readLine();
//if (s == null || s.length() == 0) break; // stop on empty lines and end of stream
if (s == null) break; // stop at end of stream only
line[i++] = s;
}