2011-07-25 59 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