我有一个文本文件,每行都有一个数字。
0
55
3
15
63
8
0
-8
9
89
504
32
我有一个Car
,它接受三个参数:
文本文件中的第一行对应于起始里程表读数
第二个是最终阅读
第三是升
第四个是第二个Car
等的起始里程表读数。
我需要读取文本文件,创建一个对象,以及汽车的参数。
对于car3 (0, -8, 9)
,有一个负数,因此忽略整个集合,(89, 504, 32)
变为car3
。
我提到Anubian Noob's answer;这是我目前的代码:
final String INPUT_FILE = "data.txt";
final String OUTPUT_FILE = "report.txt";
BufferedReader inputFile = new BufferedReader (new FileReader (INPUT_FILE));
BufferedWriter outputFile = new BufferedWriter (new FileWriter (OUTPUT_FILE));
LineNumberReader lineNumber = new LineNumberReader (new FileReader (INPUT_FILE));
lineNumber.skip(Long.MAX_VALUE);
int length = lineNumber.getLineNumber();
lineNumber.close();
String line = inputFile.readLine();
Car[] car = new Car[length/3];
while (line != null)
{
for (int i = 0; i < length/3; i += 3)
{
int startReading = Integer.parseInt(inputFile.readLine());
int endReading = Integer.parseInt(inputFile.readLine());
int liter = Integer.parseInt(inputFile.readLine());
car[i] = new Car (startKm, endKm, litre);
}
}
inputFile.close();
outputFile.close();
在线int liter = Integer.parseInt(inputFile.readLine());
我收到以下错误:
java.lang.NumberFormatException: null
null (in java.lang.Integer)
如何将三条信息存储到各自的对象中?
*注意:文本文件中没有设定数量的行,我们必须使用数组。
答案 0 :(得分:2)
这是因为你正在阅读文件的第一行,而不是使用它;你从文件的第二行开始,并将其分配给第一辆车的startReading
。所以,你不会在文件中有足够的行数(你先计算文件中的行数,从而计算出汽车数量,但你读的行数太多了)
另外,你的循环不应该用3增加i
,因为你已经将行数除以3.而你使用i
作为{{1的索引数组。
将代码更改为:
car
答案 1 :(得分:1)
代码的问题在于下面的嵌套循环:
String line = inputFile.readLine();
Car[] car = new Car[length/3];
while (line != null)
{
for (int i = 0; i < length/3; i += 3)
{
int startReading = Integer.parseInt(inputFile.readLine());
int endReading = Integer.parseInt(inputFile.readLine());
int liter = Integer.parseInt(inputFile.readLine());
car[i] = new Car (startKm, endKm, litre);
}
}
由于您正在阅读inputFile
初始化line
变量的第一行,因此您的所有进一步的汽车价值读数均为1.此外,因为您永远不会重新分配line
变量它将始终不为null(除非您读取空文件)并将创建无限循环。
使用外部循环一起删除行变量应解决问题,因为您已经拥有基于文件中行数的条件。
答案 2 :(得分:0)
为什么不创建一个名为car的类:
public Class Car{
private int starting_odometer;
private int final_odometer;
private int liters;
//Constructor
//Getters and setters
}
然后读取文件并将行设置为正确的属性:
Car myCar = new Car();
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
int count=1;
while ((line = br.readLine()) != null) {
if(count<=3)
{
if(count==1){
myCar.setStarting_odometer(parseInt(line);
}
if(count==2){
myCar.setFinal_odometer(parseInt(line);
}
if(count==3){
myCar.setLiters(parseInt(line);
}
count++;
}
else {count=1;}
}
br.close();