2017-08-11 59 views
-1

我有幾個這種格式的txt文件,我需要閱讀它們並收集信息。Java如何使用BufferedReader以這種格式讀取txt文件

FILE1.TXT: enter image description here FILE2.TXT: enter image description here

我只是想讀「文件」部分,它可以通過「文件」保存爲一個字符串,及其所有子內容另一串。

(例如,在FILE1.TXT :)

String file = "file"; 

我想寫一個for循環讀取所有的子內容,並保存到另一個字符串如:

for (int i = 0; i < numberOfSubcontentLines; i++){ 
    sub = sub + br.readLine() + ", "; 
} 

對我來說困難是不同的txt文件有不同的子內容行,我不知道如何閱讀這些行,以便該方法可以在兩種情況下工作。

目前代碼我想:

public void readFile(String fileLocation) throws IOException { 
    fileMap = new HashMap<>(); 
    FileReader reader = new FileReader(fileLocation); 
    BufferedReader br = new BufferedReader(reader); 
    String line; 
    String file; 
    // Assign a temp value to save the sub-content 
    String temp = ""; 
    while ((line=br.readLine()) != null) { 
     if(line.contains("file")){ 
      file = "file"; 
      // Skip the next line 
      br.readLine(); 
      // save all the sub-contents 
      do { 
       temp = temp + br.readLine() + ", "; 
      } while(br.readLine().contains("****")); 
     } 
    } 
    fileMap.put(file, temp); 
    System.out.println(fileMap); 
} 

它沒有得到我想要的東西。任何建議或想法? Tkx在先進。

+0

大概,你正在寫一個方法。該方法的輸入是什麼? (我猜的是文件名,但另一部分可能是文件的「部分」名稱,在你的例子中,這可能是「文件」,但如果你想讀取它也可能是「蘋果」 「蘋果」部分)。什麼是期望的輸出?關於文件格式可以假定什麼? –

+0

最適合您首先嚐試自己編寫此代碼,嘗試使用代碼並嘗試使用工作程序。如果失敗了,那麼你可以問一個更具體的問題,向我們展示這個代碼嘗試(一個完整的小型可編譯和可運行程序)。如果沒有這種嘗試,你的問題就會轉化爲對代碼的請求,這是不允許的。我敢肯定,考慮到你的知識和技能,你可以通過一次體面的嘗試來解決這個問題,也可以非常接近解決方案(還有很多寫在紙上的代碼流的邏輯)。 –

+0

你正在太多不同的地方閱讀,並且無法正確處理事情。相反,您需要創建一個狀態機 - 一個用於讀取行的while循環(不是讀取行的一堆位置,然後將行饋送到狀態機,該狀態機將以各種方式處理行,具體取決於它的狀態*。 –

回答

1

你想創建和使用一個狀態機,一個持有狀態的對象(一個枚舉或布爾值可以用於此目的),給出每行文本,然後根據其狀態處理每一行。碼流的示意圖看起來是這樣的:

enter image description here

其他州可以包括輸入或文件結束。
關鍵的一點是,該行只能在while循環中的某一點讀取,然後該循環將文本傳遞到處理它的代碼的其他部分。

+0

感謝您的解釋,我將嘗試以這種方式工作,看看我能否解決它。 –