2014-11-04 80 views
0

我有了格式化像這樣值的列表的文本文件:讀取特定行,然後outputing java的

FirstName LastName 
Labs 
10, 25, 25, 15, 30, 50, 40, 40, 40, 25, 50 
10, 25, 25, 15, 29, 49, 39, 39, 39, 25, 49 
Homework 
100, 100, 100, 100, 100, 100, 100, 100 
100, 100, 100, 100, 100, 100, 100, 93 
Quizzes 
10, 10, 15, 10, 9, 10, 15 
8, 10, 11, 9, 7, 7, 11 
Exams 
100, 100, 100, 100, 100 
96, 78, 88, 62, 92 

有沒有一種方法,我可以採取特定行,說行在考試中讀取所有100個數據,並將該行存儲到一維數組中?

+0

「考試」下有多行。你爲什麼要讀第一行,而不是下一行? – hfontanez 2014-11-04 22:45:51

+0

您會將第一行讀入一個變量,然後將第二行讀入另一個變量,然後查找平均值。 – javaNoob 2014-11-04 22:48:46

回答

0

您必須仔細閱讀文件,直到您可以讀取文件中的檢查點,然後準備將值插入到陣列中。 因此,您需要閱讀文件,開始搜索您的考試關鍵字,然後在下一行開始讀取值,直到達到您想要的數量或文件/行的結尾。

0

兩種方式:

  1. 您可以使用Java的RandomAccessFile類。
  2. 您可以使用正則表達式來查找您需要的部分。

,我會在以後編輯這個答案提供兩個例子(如果別人不早一點這樣做)

UPDATE:使用RandomAccessFile的(這是在匆忙做有可能是一個更好方式)

public static void main(String[] args) 
{ 
    RandomAccessFile file = null; 
    try 
    { 
     file = new RandomAccessFile("grades.txt", "r"); // read-only file 
     while(!file.readLine().startsWith("Exams")) 
     { 
      file.seek(file.getFilePointer()); 
     } 
     // Get the numbers and add them 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     try 
     { 
      file.close(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

while()循環正在將指針移動到「檢查」後面的下一行。您可以跟蹤要讀取的剩餘字節數,並創建一個從當前位置讀取文件的字節數組。我不會讀到最後,因爲「考試」可能不是最後一個記錄。要使其與文件的所有部分(即作業)一起工作,您必須更聰明一點,以免最終獲得比您需要的更多數據。但這是RandomAccessFile背後的想法。當您必須在「考試」下輸入新成績時,此課程也很有用。在這種情況下,文件權限必須設置爲「rw」。

如果您可以保證文件的結構永遠不會改變,RandomAccessFile非常棒,因爲您可以快速轉到文件的不同部分,讀取和/或寫入信息,然後繼續。您可以將其視爲非常低級別的數據庫。

相關問題