2017-03-21 80 views
1

基本上我有一個從.txt文件讀取多行的任務。 每行文本文件中有4個值,每個值由2個空格分隔。 該文件中有大約10行數據。從BufferedReader中讀取文件

從文件中獲取輸入後,程序將其放到數據庫中。數據庫連接功能正常工作。

我現在的問題是使用BufferedReader從文件中讀取數據。 問題是,如果我取消註釋底部3行中的任意一行,則BufferedReader會讀取其他所有行。如果我不使用它們,那麼下一個輸入是String類型就有一個異常。 我已經打算使用帶有.hasNextLine()方法的掃描儀。

有什麼想法可能是問題以及如何解決它? 謝謝。

File file = new File(FILE_INPUT_NAME); 
FileReader fr = new FileReader(file); 
BufferedReader readFile = new BufferedReader(fr); 
String line = null; 
while ((line = readFile.readLine()) != null) { 
    String[] split = line.split(" ", 4); 

    String id = split[0]; 
    nameFromFile = split[1]; 
    String year = split[2]; 
    String mark = split[3]; 

    idFromFile = Integer.parseInt(id); 
    yearOfStudyFromFile = Integer.parseInt(year); 
    markFromFile = Integer.parseInt(mark); 

    //line = readFile.readLine(); 
    //readFile.readLine(); 
    //System.out.println(readFile.readLine()); 
} 

編輯:.txt文件的格式有錯誤。一個缺失的價值。 但現在我得到一個ArrayOutOfBoundsException。

編輯編輯:.txt文件中的另一個錯誤!原來有一個單一的空間,而不是一個雙。它現在似乎在工作。但是,有關如何處理將來像這樣的文件錯誤的任何建議?

+0

在你的while循環中,你正在讀取一行到-a時間的變量'line',然後被分割爲'id ''''name'File','year'和'mark' - 爲什麼你要在循環中進一步讀取'line' - 這是重複的 –

+1

請提供更多關於你發佈代碼的方法的細節。它拋出一個'IOException'嗎?你從.txt文件讀取什麼樣的數據?他們每行有4個令牌(字符串或數字)嗎? 3條註釋掉的行最有可能應該保留註釋。 :-) – PNS

+0

該文件包含以下信息:id(Student's ID),名稱,學習年份和標記(滿分爲100) –

回答

0

代碼的編譯版本發佈可以是上面

public void read() throws IOException { 
    File file = new File(FILE_INPUT_NAME); 
    FileReader fr = new FileReader(file); 
    BufferedReader readFile = new BufferedReader(fr); 
    String line; 
    while ((line = readFile.readLine()) != null) { 
     String[] split = line.split(" ", 4); 
     if (split.length != 4) { // Not enough tokens (e.g., empty line) read 
     continue; 
     } 
     String id = split[0]; 
     String nameFromFile = split[1]; 
     String year = split[2]; 
     String mark = split[3]; 

     int idFromFile = Integer.parseInt(id); 
     int yearOfStudyFromFile = Integer.parseInt(year); 
     int markFromFile = Integer.parseInt(mark); 

     //line = readFile.readLine(); 
     //readFile.readLine(); 
     //System.out.println(readFile.readLine()); 
    } 
    } 

使用單個空間(" "而不是原始" ")。爲了分割任何數量的變化,可以使用正則表達式,例如, "\\s+"。當然,如果反映輸入數據的結構,也可以使用2個空格。

該方法應該如何處理提取的值(例如,將它們返回某種類型的對象中,或將它們直接保存到數據庫中)取決於使用它的應用程序。

+0

謝謝,我發現這個錯誤發生在它讀取的文件中。我從文件中讀取的方式是雙倍空間,因爲名稱字段的工作方式類似於「Bob B」,所以名字和姓氏在同一個字段中。 –

+0

如果不是完全讀取4個標記,您肯定需要確保您執行了一些操作。加上許多其他的錯誤處理。快樂的編碼! :-) – PNS

+0

謝謝!我已經在做例外,但是,少於4個令牌肯定是優先解決方案! –

1

問題是,如果我取消註釋底部3行中的任意一行,BufferedReader會讀取其他所有行。

正確。如果你放入任何這些代碼行,讀取的文本行將被丟棄並且不被處理。您已經在閱讀while條件。你不需要再讀一遍。如果你把任何這些行放入,它們將被丟棄而不是進行

相關問題