簡體   English   中英

從文本文件中讀取數據並將其存儲在對象中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM