对不起,标题不好;我很难解释。我正在使用品牌,型号,数字格式的文本文件。在文本文件中,为此有多行。当我的程序启动时,将使用文件的输入调用构造函数,并读取文件的行,同时将值分配给添加到数组中的对象。奇怪的是,此代码仅在某些时间有效。例如,当我只有两行make,model,number时,它将始终如一地工作。但是,当我添加三行时,会引发错误。有时,我会重新运行该程序或添加第四行,它将起作用。我不知道为什么会这样。任何帮助将不胜感激!:
ArrayList<Car> carArray = new ArrayList<Car>();
public CarDealershipSystem(File carFile, File associateFile) {
//carFile
try (BufferedReader br = new BufferedReader(new FileReader(carFile))) {
String line;
while((line = br.readLine()) != null) {
String[] lineArray = line.split(",");
if (lineArray.length>=3) {
Car car = new Car();
car.setMake(lineArray[0]);
car.setModel(lineArray[1]);
car.setVin(lineArray[2]);
carArray.add(car);
}
else {
System.err.printf("%sis not a car.%n", line);
}
}
}catch(IOException e) {
e.getLocalizedMessage();
e.printStackTrace();
}
答案 0 :(得分:2)
每次调用readLine()
时,它会占用一行。您需要存储该行,否则它不会回来。在此处查看带注释的代码:
while((br.readLine()) != null) { // <-- read a line and compare it to null
String line = br.readLine(); // <-- read another line
应该是类似
String line;
while ((line = br.readLine()) != null) {
或
while (true) {
String line = br.readLine();
if (line == null) {
break;
}
// ...
在确定行为Car
之前,请确保令牌数量正确。
if (lineArray.length >= 3) {
Car car = new Car();
car.setMake(lineArray[0]);
car.setModel(lineArray[1]);
car.setVin(lineArray[2]);
carArray.add(car);
} else {
System.err.printf("%s is not a car.%n", line);
}