java - Split() 无法生成 java.lang.ExceptionInInitializerError 。如何消除此错误?
问题描述
我正在对文本文件的一行进行拆分,但是我收到错误
java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
at String[] num= firstline.split(","); 行。谁能告诉我哪里错了
public class split {
private static java.io.File file;
private static BufferedReader reader;
static int noOfLines=0;
static {
try {
file = new java.io.File("/home/madhu95/Desktop/data.txt");
reader = new BufferedReader(new FileReader(String.valueOf(file)));
while (reader.readLine() != null) {
noOfLines++;
}
System.out.println(noOfLines);
String firstline=reader.readLine();
String[] num= firstline.split(",");
int numberofmobile=Integer.parseInt(num[0]);
System.out.println(numberofmobile);
int numberofDept=Integer.parseInt(num[1]);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
解决方案
while (reader.readLine() != null) { noOfLines++; }
这会消耗流。完成此循环后,您将位于文件的末尾。
String firstline=reader.readLine();
所以这是一个谎言——这不是第一行。不再。通过数行,您不再存在。事实上,firstline
永远都会在null
这里。
String[] num= firstline.split(",");
.
它左边的东西在哪里null
,给你一个 NPE。你没有明白这一点,所以你的初始化失败了。不要捕获该异常 - 通过计算行数来解决您转发整个文件的问题。
编辑:添加一个最有可能解决所有问题的解决方案。
鉴于您想在处理它们之前知道行数,您要么需要读取文件两次,要么完全重写您的逻辑以不再需要提前知道行数。复杂,因此,相反,如果您不处理文件,但处理 a List<String>
- 它知道它有多少行(list.size()
将为您提供该信息),该怎么办。然后,首先将文件读入行列表,然后从那里获取:
import java.nio.file.*;
List<String> lines =
Files.readAllLines(Paths.get("/Path/to/your/data.txt"));
// ....