2014-02-08 3 views
-2

Я получаю исключение NullPointerException, когда пытаюсь записать информацию в файл. Может ли кто-нибудь помочь мне понять, что происходит не так?Запись в файл java error

else if(response == 4){ 
      System.out.println("Enter the name of the file to save items to: "); 
      saveFile = input.nextLine(); 

      try {outfile = new PrintWriter(new FileWriter(saveFile+".txt"));} 
      catch (IOException err) { 
       outfile = null; 
       System.out.println("Error writing to file\n"); 

      } 
      for (int i = 0; i < items.length; i++) { 

       outfile.print(items[i].getType() + "\n" + items[i].getName() + "\n" + items[i].getDescription() + "\n" + items[i].getCalories() + "\n" + items[i].getItemSpecifics()); 
      } 
+0

Что такое строка 'outfile = null;' делать? –

+0

Вам нужно проверить 'outfile' перед' outfile.print' –

+0

Мне кажется, вы хотите поставить цикл 'for' внутри блока' try'. Таким образом, он не будет выполнен, если возникает исключение при инициализации 'outfile'. – Onyxite

ответ

2

Вы устанавливаете свой PrintWriter объект (outfile) для null, и пытается выполнить метод print на ней после этого.

Именно поэтому вы получаете NullPointerException.

Проверка документации, вы можете узнать, что кто выбрасывает IOException, фактически является конструктором FileWriter.

Throws: 
IOException - if the named file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason 

Таким образом, это, вероятно, ваша проблема. Если нет, то вы можете просто попытаться создать его, как это, вам не нужно FileWriter часть:

outfile = new PrintWriter(saveFile+".txt"); 

Я проверил оба пути на моем компьютере, и она работает.

Кроме того, не забудьте вызвать метод close(), когда вы закончите запись в файле, иначе он не будет изменен.

+0

thats only if есть ошибка, не исправляет исключение – user2989591

+0

@ user2989591 Отредактировано. Проверьте, почему выбрано исключение. Это должна быть ваша проблема. –

0

Там может быть несколько мест, вы получаете в коде на NullPointerException вы вставили:

  1. Вы называете outfile = null, когда ловить исключение, а затем попытаться использовать его впоследствии, когда он будет нулевым.
  2. input может быть пустым, если вы звоните input.nextLine()
  3. items может быть пустым, если вы звоните items.length
  4. items[i] может быть пустым, если вы звоните items[i].getType()

Это трудно сказать, без полной трассировки стека - отладка в нее будет лучшим выбором. Исключение может также происходить внутри одной из других функций, вызываемых здесь (getCalories() и т. Д.)

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