2016-04-29 36 views
0

我想讀一個.txt文件,這是表中的製表位格式是這樣的:JAVA:如何在delimitered一個製表位閱讀很長的行txt.file

1 ABC short text 
2 DEF very very long text.... 
3 GHI short text 
4 JKL short text 

的問題是,不當文本非常長(這意味着只有幾KB而非GB左右;-))。 我用這個代碼做閱讀:

try { 
    InputStream fis = new FileInputStream(file.getAbsolutePath()); 
    InputStreamReader isr = new InputStreamReader(fis, Charset.forName("ISO-8859-1")); 
    BufferedReader br = new BufferedReader(isr); 

    while ((line = br.readLine()) != null) { 
      String[] values = line.split("\t", -1); // don't truncate empty fields 
      System.out.println(values[0] + " " + values[1] + " " + values[2]);     
    } 
} 

說明問題更好:上表中的 的結果是這樣的(這不應該是):

1 ABC short text 
2 DEF very very lo 
+2

你可以試試[這個答案](http://stackoverflow.com/a/13569964/3998458) –

+0

很長時間,我的意思是像幾個KB.I認爲它在比255個字符更長的行破壞。 – user3776738

+0

你真的打到OOM嗎?或者在邏輯上,你認爲它實際上並沒有讀完整行?我試圖理解當你說「問題是,不是全行被讀取」的時候到底是什麼問題,你會看到一個錯誤嗎? – SGM1

回答

1

你可以寫一個更復雜的解析器,每次讀取一個字符,直到將字符放入緩衝區,直到遇到TAB或EOL。在TAB中,處理緩衝區,增加列計數,然後清除緩衝區。在EOL中,處理緩衝區,將列計數設置爲0,然後清除緩衝區。