Это помогло мне решить эту проблему. Я читаю файл построчно. Я делаю BufferedReader очень рано в своей программе. Затем я проверяю, имеет ли readLine значение null, и выполняю myFile.close, а затем новый BufferedReader. При первом проходе переменная readLine будет нулевой, поскольку я установил ее таким образом глобально, а затем еще не выполнил readLine. Переменная определена глобально и имеет значение null. В результате происходит закрытие и создание нового BufferedReader. Если я не делаю BufferedReader в самом начале моей программы, то этот myFile.close выдает NPE при первом проходе.
Пока файл считывается строка за строкой, этот тест завершается ошибкой, поскольку readLine не равен нулю, в тесте ничего не происходит, а разбор оставшейся части файла продолжается.
Позже, когда readLine попадает в EOF, он снова оценивается как null. IE: второй проход этой проверки также выполняет myFile.close и новый BufferedREader, который снова сбрасывает readLine обратно в начало.
По сути, внутри моего цикла или вне моего цикла это действие происходит только в том случае, если для переменной readLine глобально установлено значение null или EOF. В любом случае я делаю «сброс», чтобы вернуться к началу файла и новому BufferedReader.
if (readLineOutput == null) {
//end of file reached or the variable was just set up as null
readMyFile.close();
readMyFile = new BufferedReader(new FileReader("MyFile.txt"));
}
person
JavaNoob
schedule
20.07.2017
seek(0)
приведет вас к началу файла, аRandomAccessFile
не имеет буфера. - person user207421   schedule 16.02.2016