2014-02-08 163 views
-2

我正在嘗試向信息寫入文件時遇到NullPointerException。任何人都可以幫我看看發生了什麼問題嗎?寫入文件java錯誤

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.print'之前檢查'outfile' –

+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

這只是如果有錯誤,沒有修復異常 – user2989591

+0

@ user2989591編輯。檢查爲什麼拋出異常。這一定是你的問題。 –

0

可能有幾個地方你得到的代碼NullPointerException您粘貼:

  1. 你叫outfile = null,捕獲異常時,則嘗試使用它之後,我們會很空。
  2. input當你調用input.nextLine()
  3. items當你調用items.length
  4. items[i]可能是,當你調用空可爲空items[i].getType()

這很難說沒有一個完整的堆棧跟蹤可以爲null - 調試到它將是你最好的選擇。 (getCalories()等)