Это помогло мне решить эту проблему. Я читаю в файле построчно. Я делаю BufferedReader очень рано в моей программе. Затем я проверяю, является ли readLine нулевым, и выполняю myFile.close, а затем новый BufferedReader. При первом прохождении переменная readLine будет нулевой, поскольку я установил ее таким образом глобально, а затем еще не выполнил readLine. Переменная определяется глобально и имеет значение null. В результате происходит закрытие и новый BufferedReader. Если я не выполняю BufferedReader в самом начале моей программы, то этот myFile.close выдает NPE при первом проходе.
Пока файл читается построчно, этот тест не пройден, поскольку readLine не равен нулю, в тесте ничего не происходит, а остальная часть анализа файла продолжается.
Позже, когда readLine достигает EOF, он снова оценивается как ноль. 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"));
}