Android文件写空指针异常

时间:2011-07-25 22:39:57

标签: android fileoutputstream

在我的应用程序中有3个EditTexts。我想将此EditTexts的内容写入文件,但filewrite会抛出nullpointer异常。为什么呢?

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();
        } 
    }

3 个答案:

答案 0 :(得分:0)

最有可能

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

失败,因为你发现异常f1仍为空。在Android的大多数情况下,您只能在应用程序数据目录或外部存储中创建文件。

答案 1 :(得分: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

答案 2 :(得分: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());
}

如果可以,我会删除该主题。我接受这个答案来结束这个话题。

谢谢,无论如何。