2011-07-25 89 views
0

在我的應用程序中有3個EditTexts。我想將此EditTexts的內容寫入文件,但filewrite會拋出一個空指針異常。爲什麼?Android文件寫入空指針異常

OutputStream f1;是全局聲明的。

BtnSave = (Button)findViewById(R.id.Button01); 
BtnSave.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     intoarray = name + "|" + number + "|" + freq + "\n"; 
     Toast.makeText(Main.this, "" + intoarray, Toast.LENGTH_SHORT).show(); 
     //so far so good 
      byte buf[] = intoarray.getBytes(); 

      try { 
      f1 = new FileOutputStream("file2.txt"); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
      try { 
      f1.write(buf); //nullpointer exception 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
      try { 
      f1.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
+0

stacktrace在logcat中說什麼? – Merlin

+0

您現在正在使用EXTERNAL存儲,是您想要的嗎?如果您想使用INTERNAL存儲,請參閱下面的答案 – Idistic

回答

0

對不起,所有你試圖幫助我的外部存儲,我問錯了問題。我想使用內部存儲(現在它正在工作)。我不知道是什麼問題,但與下面的代碼(即我已經使用了很多)FILEWRITE是確定的:

try { 
File root = Environment.getExternalStorageDirectory(); 
File file = new File(root, "Data.txt"); 
if (root.canWrite()) 
{ 
    FileWriter filewriter = new FileWriter(file,true);         
    BufferedWriter out = new BufferedWriterfilewriter);          
out.write(intoarray);        out.close();      }     } 

catch (IOException e) {       Log.e("TAG", "Could not write file " + e.getMessage());     } 

,如果我能我會刪除該話題。我接受這個答案來結束這個話題。

謝謝,無論如何。

0

最有可能

f1 = new FileOutputStream("file2.txt"); 

失敗,因爲你捕捉到的異常F1仍然空。在大多數情況下,您只能在應用程序數據目錄或外部存儲中創建文件。

0

您目前使用這種方式將無法正常工作,通常您正在嘗試寫入內部存儲器,該存儲器對您的應用程序是私有的,並且必須包含在您的應用程序目錄中。

的正確方法創建的文件流是

fin = openFileOutput("file2.txt", Context.MODE_PRIVATE); // open for writing 
fout = openFileInput("file2.txt", Context.MODE_PRIVATE); // open for reading 

這將找到該文件在存儲區爲您的應用程序,它通常是像

/data/data/com.yourpackagename/files/... 

仍然可以創建目錄如果你需要一個目錄結構的話,你的應用程序區內。

如果你需要寫這是一個不同的過程,更多信息請參考Android Data Storage