Java: как читать файл построчно, игнорируя \ n

Я пытаюсь прочитать строку текстового файла, разделенную табуляцией, на строку. Строки разделяются с помощью возврата каретки ("\ r \ n"), а LineFeed (\ "n") допускается в текстовых полях, разделенных табуляцией.

Поскольку я хочу читать строку файла в строке, я хочу, чтобы моя программа игнорировала автономный "\ n". К сожалению, BufferedReader использует обе возможности для разделения строк. Как я могу изменить свой код, чтобы игнорировать автономный "\ n"?

try 
{
    BufferedReader in = new BufferedReader(new FileReader(flatFile));
    String line = null;
    while ((line = in.readLine()) != null) 
    {
        String cells[] = line.split("\t");                          
        System.out.println(cells.length);
        System.out.println(line);
    }
    in.close();
} 
catch (IOException e) 
{
    e.printStackTrace();
}

person Del    schedule 23.05.2013    source источник


Ответы (3)


Используйте java.util.Scanner.

Scanner scanner = new Scanner(new File(flatFile));
scanner.useDelimiter("\r\n");
while (scanner.hasNext()) {
    String line = scanner.next();
    String cells[] = line.split("\t");                          
    System.out.println(cells.length);
    System.out.println(line);
}
person rolfl    schedule 23.05.2013
comment
Имя метода на самом деле useDelimiter (редактирование должно содержать не менее 6 символов, поэтому я не могу редактировать ответ сам) - person Marco Lackovic; 29.08.2014
comment
@Krige - очень признателен. Я исправил это. - person rolfl; 29.08.2014

Вы можете просто пропустить пустые строки:

while ((line = in.readLine()) != null) {
    // Skip lines that are empty or only contain whitespace
    if (line.trim().isEmpty()) {
        continue;
    }

    String[] cells = line.split("\t");
    System.out.println(cells.length);
    System.out.println(line);
}
person Jesper    schedule 23.05.2013

Вы можете использовать методы FileUtils.readLines из apache Commons-io.

Преимущество его использования в том, что вам не нужно заботиться об открытии и закрытии файла. Это сделано за вас.

person wesoly    schedule 23.05.2013