2017-06-10 86 views
2

在我的大學實驗室我正在開發一個能夠存儲文件中的數據(給定文件路徑作爲字符串)的Java系統。我正在嘗試使用來自路徑的一系列線路處理問題,但我在早期階段被卡住了。該文件的結構如下:一行的不同字段由「;」分隔每行以「P」或「D」開頭。根據此參數,我將使用該線的面積來創建「患者」對象或「醫生」對象,隨後將其存儲在兩張不同的地圖(患者或醫生)中。我做了以下內容:Java:處理流從文件中讀取

Path p= Paths.get(path); 
Stream <String> lines=Files.lines(p, StandardCharsets.UTF_8); 
lines.flatMap(l->Stream.of(l.split("; "))).... 

我的想法是在該行的開始檢查該單詞,並根據是,剩餘的元素將被用作參數能夠創建和存儲相應的對象的方法(insertPatient或insertDoctor)。但我還沒有想到如何做到這一點。我知道採用不同的方式來做同樣的事情,但我真的想要使用流來開發解決方案,至少在閱讀不同行的過程中。感謝, Gianluca。

回答

3
try (Stream<> lines = Files.lines(p, StandardCharsets.UTF_8)) { // 1 
    lines.map(line -> line.split(";"))       // 2 
     .forEach(lineAsArray -> { 
      if (lineAsArray[0].equals("D")) { 
       insertDoctor(lineAsArray); 
      } 
      else if (lineAsArray[0].equals("P")) { 
       insertPatient(lineAsArray); 
      } 
     }); 
} 
  1. 使用try-與資源,以確保數據流,因此,文件閱讀器,關閉
  2. 不要使用flatMap,既然你想採取行動的完整的生產線,而不是細胞。
+0

謝謝你,你的解釋真的很明顯! – Gianluca

+1

注意:如果您不爲'Files.lines'指定它,UTF-8是默認的,與大多數Java APis不同。 –