2014-10-27 3 views
0

Так что я получаю нулевой указатель на последней строке этого метода. Из всего, что я читал на других с этой проблемой, использование while ((lineIn = myReader.readLine()) != null) должно останавливать файл, когда он ничего не оставил, но, похоже, это не так. Вместо этого я в конечном итоге поймал NPE. Я не могу понять, почему это так. Любой совет будет принят во внимание! В настоящее время я помогаю в решении этой проблемы, используя другое заявление catch (NullPointerException), но я не считаю, что это адекватное решение.Исключение Null Pointer в EOF

BufferedReader myReader; 

     try { 
      FileInputStream fileInStream = new FileInputStream(
        fileLocation); 
      InputStreamReader fileInputStreamReader = new InputStreamReader(
        fileInStream, "UTF-16"); 
      myReader = new BufferedReader(fileInputStreamReader); 

      String lineIn = ""; 

      // Read the next line until there aren't any left 
      while ((lineIn = myReader.readLine()) != null) { 
       //Do stuff with line 
      } 
      System.out.println("done"); 
      // Close the file connections now that the read is done. 
      fileIn.close(); 
      myReader.close(); 
     } catch (Exception e) { 
      System.out.println("Error: " + e.getMessage()); 
      e.printStackTrace(); 

}

+2

Закройте считыватель в блоке finally: 'finally {if (fileIn! = Null) fileIn.close(); if (myReader! = null) myReader.close(); } ' – EpicPandaForce

+5

Что вы делаете внутри' // Do stuff with line'? –

+1

@ Zhuinden Закрытие 'fileInStream' достаточно. – m0skit0

ответ

0

Оказывается, этот вопрос я не закрыта должным образом своих читателей файлов из предыдущих операций. Спасибо вам, ребята.

3

Null Pointer никогда не должен быть пойман, он должен быть исправлен. Вы не хотите, чтобы они распространялись на остальные части вашего кода.

Также убедитесь, что вы закрываете свой файл. Добавьте блок finally и закройте эти файлы. Таким образом, если исключение поймано, вы все равно закроете файл.

+1

try-with-resources (http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) - это подход. – Tom

+0

yup, из документа кажется, что try-with-resource - это java 7 и выше. Для всех остальных версий используйте try с помощью finally. – Chiseled

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