从文本文件中读取数据并将其存储在对象中
我在每一行上都有一个数字的文本文件。从文本文件中读取数据并将其存储在对象中
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)
如何三块的信息存储到各自的对象?
*注意:文本文件中没有一定数量的行,我们必须使用一个数组。
这是因为您正在阅读文件的第一行,而没有使用它;您将从文件的第二行开始,并将其分配给第一辆车的startReading
。因此,文件中没有足够的行数(您先计算行数,从而计算出文件数量,但是您读取的行数太多)
此外,您的循环应该因为您已将行数除以3,所以您不会将i
增加为3.并且您使用i
作为car
数组的索引。
更改代码:
lineNumber.close();
// REMOVE String line = inputFile.readLine();
Car[] car = new Car[length/3];
// REMOVE while (line != null)
// REMOVE {
for (int i = 0; i < length/3; i ++) // DON'T DO i += 3 because that will make you go beyond the bounds of the car array
{
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);
}
// REMOVE }
或者只是使用'Files.readAllLines'并且省去90%的复杂度。 – 2014-10-31 09:42:26
与代码的问题是与下面的嵌套循环:
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。另外,因为你永远不会重新指定变量,它将永远不为空(除非你读取一个空文件)并且会创建无限循环。
由于您已经拥有基于文件中行数的条件,因此将外部变量全部删除并解决问题。
你为什么不创建一个名为汽车类:
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();
这意味着您已到达文件末尾。为什么你对同一个文件有两个'Reader'实例?只需使用['Files.readAllLines'](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#readAllLines(java.nio.file.Path,%20java .nio.charset.Charset))。 – 2014-10-31 08:24:49
尝试在执行整数转换之前打印当前行的日志,以便在发生故障时确切地知道哪一行。除此之外,和鲍里斯一样的评论:为什么你不保留lineNumber作为你的读者? – gdupont 2014-10-31 08:26:45
我以为BufferedReader和LineNumberReader是不同的。如果我只留下'LineNumberReader'并用'lineNumber'替换'inputFile',我会在'String line = inputFile.readLine();'处得到一个错误。''它说:java.io.IOException:Steam close(在java.io. BufferedReader' – user3479783 2014-10-31 08:33:51