簡體   English   中英

Android FileWrite空指針異常

[英]Android filewrite nullpointer exception

在我的應用程序中,有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();
        } 
    }

最有可能的

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

失敗,並且由於捕獲了異常,因此f1保持為空。 在大多數情況下,在Android中,您只能在應用程序數據目錄或外部存儲中創建文件。

當前使用此方法的方式不起作用,通常是您嘗試寫入內部存儲,該內部存儲對您的應用程序是私有的,必須包含在應用程序目錄中。

創建文件流的正確方法是

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數據存儲

抱歉,您嘗試幫助我的所有方式,我提出了錯誤的問題。 我想使用內部存儲(現在可以使用)。 我不知道問題是什么,但是下面的代碼(我已經使用了很多)的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());
}

如果可以的話,我將刪除該主題。 我接受此答案以結束話題。

不管怎么說,還是要謝謝你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM