2016-04-29 5 views
0

Я хочу, чтобы прочитать файл .txt, который таблица в формате TabStop, как это:JAVA: как читать очень длинные строки в TabStop delimitered txt.file

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

Проблема в том, что не полная строка читается, когда текст очень длинный (это означает, что всего несколько КБ не являются ГБ или так ;-)). Я использую этот код, чтобы сделать чтение:

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 и очистите буфер.

Смежные вопросы