Чтение текстового файла и пропуск пустых строк до тех пор, пока не будет достигнут EOF

Я пытаюсь прочитать CSV-файл, полный текста; однако, если где-то посередине есть пустая строка, все ломается, и я получаю:

java.lang.RuntimeException: java.lang.StringIndexOutOfBoundsException

Как мне удалить/игнорировать пустые строки, если это не конец файла?

        file = new FileReader(fileName);
        @SuppressWarnings("resource")
        BufferedReader reader = new BufferedReader(file);
        while ((line = reader.readLine()) != null) {
                     //do lots of stuff to sort the data into lists etc
        }
    } catch (Exception e) {
        System.out.println("INPUT DATA WAS NOT FOUND, PLEASE PLACE FILE HERE: " + System.getProperty("user.dir"));
        throw new RuntimeException(e);
    } finally {
        if (file != null) {
            try {
                file.close();
            } catch (IOException e) {
                // Ignore issues during closing
            }
        }
    }

person Ofek    schedule 06.04.2014    source источник


Ответы (1)


Именно эта часть вызывает проблемы:

while ((line = reader.readLine()) != null) {

      //do lots of stuff to sort the data into lists etc
      // **** Something assumes line is not empty *******
    }

Чтобы игнорировать пустые строки, добавьте эту проверку, чтобы убедиться, что в строке что-то есть:

while ((line = reader.readLine()) != null) {
    if(line.length() > 0) {
      //do lots of stuff to sort the data into lists etc
    }           
}
person lreeder    schedule 06.04.2014
comment
На самом деле вы должны сделать if(line.trim().length() > 0), чтобы поймать пустые строки, которые могут иметь пробелы. - person Jared; 06.04.2014
comment
Ура, это было очень простое решение! - person Ofek; 06.04.2014
comment
@Jared Зависит от того, как вы определяете «пустой». Если «пустые» строки содержат не завершающие пробельные символы, то да, вы захотите применить trim(). Если пустые строки содержат только символы завершения строки, reader.readLine() вернет пустую строку. - person lreeder; 06.04.2014
comment
@lreeder это не будет проблемой, если вы читаете только файлы, сгенерированные компьютером (которые вряд ли добавят ненужные пробелы). Но это это то, с чем вы должны быть осторожны при чтении сгенерированного вручную ввода (где пользователи могут случайно или неосознанно ввести ненужные пробелы). - person Jared; 06.04.2014