从文本文件中读取数据并将其存储在对象中

时间:2014-10-31 08:18:35

标签: java

我有一个文本文件,每行都有一个数字。

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)

如何将三条信息存储到各自的对象中?

*注意:文本文件中没有设定数量的行,我们必须使用数组。

3 个答案:

答案 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();