[英]Reading data from a text file and storing it in an object
我有一個文本文件,每行都有一個數字。
0
55
3
15
63
8
0
-8
9
89
504
32
我有一輛Car
可以接受三個參數:
文本文件中的第一行對應於起始里程表讀數。
第二個是最終閱讀。
第三是升。
第四個是第二起始里程表讀數Car
等
我需要讀取文本文件,創建一個對象,以及這個參數給汽車。
對於car3 (0, -8, 9)
存在負數,因此忽略整個集合,並且(89, 504, 32)
car3
(89, 504, 32)
變為car3
。
我提到了Anubian Noob的答案 ; 到目前為止這是我的代碼:
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
。 所以,你不會在文件中有足夠的行數(你先計算文件中的行數,從而計算出汽車數量,但是你讀的行數太多了)
此外,你的循環應該不會增加i
有3,因為你已經除以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 }
代碼的問題在於下面的嵌套循環:
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
變量,因此它始終不為空(除非您讀取空文件)並將創建無限循環。
使用外部循環一起刪除行變量應該可以解決問題,因為您已經擁有基於文件中行數的條件。
你為什么不創建一個名為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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.