2013-03-30 20 views
0

我有一個按鈕,我想在onClick方法中創建一個文件,但我總是得到FileNotFoundException。寫入到內部存儲的許可已經在manifest.xml在onClick()方法內創建文件

下面是代碼:

registerButton.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      try 
      { 
       bufferedWriter = new BufferedWriter(new FileWriter("sample.txt")); 
       bufferedWriter.write(getString(R.string.emailString)); 
       bufferedWriter.newLine(); 
       bufferedWriter.write(getString(R.string.passwordString)); 
       System.out.println("Done!"); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
       Log.d("MainActivity", "Bad luck!"); 
      } 
      finally 
      { 
       try 
       { 
        if(bufferedWriter != null) 
         bufferedWriter.close(); 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
        Log.d("MainActivity", "Sorry for that!"); 
       } 
      } 
     } 
    }); 

以下是錯誤日誌

03-28 01:00:11.537: W/System.err(2610): java.io.FileNotFoundException: /sample.txt: open failed: EROFS (Read-only file system) 
03-28 01:00:11.557: W/System.err(2610): at libcore.io.IoBridge.open(IoBridge.java:406) 
03-28 01:00:11.557: W/System.err(2610): at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 
03-28 01:00:11.567: W/System.err(2610): at java.io.FileOutputStream.<init>(FileOutputStream.java:73) 
03-28 01:00:11.588: W/System.err(2610): at java.io.FileWriter.<init>(FileWriter.java:80) 
03-28 01:00:11.588: W/System.err(2610): at 
org.eirich.way.MainActivity$1.onClick(MainActivity.java:34) 
03-28 01:00:11.607: W/System.err(2610): at android.view.View.performClick(View.java:3480) 
03-28 01:00:11.607: W/System.err(2610): at android.view.View$PerformClick.run(View.java:13983) 
03-28 01:00:11.628: W/System.err(2610): at android.os.Handler.handleCallback(Handler.java:605) 
03-28 01:00:11.628: W/System.err(2610): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-28 01:00:11.647: W/System.err(2610): at android.os.Looper.loop(Looper.java:137) 
03-28 01:00:11.667: W/System.err(2610): at android.app.ActivityThread.main(ActivityThread.java:4340) 
03-28 01:00:11.667: W/System.err(2610): at java.lang.reflect.Method.invokeNative(Native Method) 
03-28 01:00:11.687: W/System.err(2610): at java.lang.reflect.Method.invoke(Method.java:511) 
03-28 01:00:11.687: W/System.err(2610): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
+0

退房這個答案[如何在Android中創建文件] [1] [1]:http://stackoverflow.com/a/7718374/2225038 –

回答

3

在內部存儲爲創建文件:

bufferedWriter = new BufferedWriter(new FileWriter(new 
          File(getFilesDir()+"/sample.txt"))); 

因爲目前你沒有通過目錄路徑file.use getFilesDir()哪些返回文件系統上的目錄的絕對路徑

+1

+1這是正確的。如果你想寫'IS',你必須使用'getFilesDir()'。 – Sajmon

+0

謝謝你,K,這對我有效。我創建了一個java項目,我提供的代碼實際上工作,所以我認爲它也適用於android。我不知道我必須獲得FilesDir()^^ –

+0

+1以便快速回復。 – RobinHood

1

這是因爲您沒有將目錄路徑傳遞到FileWriter

用途:

bufferedWriter = new BufferedWriter(new FileWriter(newFile(getFilesDir()+File.separator+"sample.txt"))); 

相反:

bufferedWriter = new BufferedWriter(new FileWriter("sample.txt")); 

即使檢查下面的鏈接,它幫助你。

Writing/Reading Files to/from Android phone's internal memory

+0

嗨,OP想創建文件在內部存儲而不是SDCARD –

+0

是的,謝謝你的糾正。 – RobinHood

0

您可以通過使用openFileOutput功能寫入到內部存儲

String string = "My data"; 

FileOutputStream os = openFileOutput("sample.txt", Context.MODE_PRIVATE); 
os.write(string.getBytes()); 
os.close(); 

並確保您有following permission

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

嗨,OP想創建文件在內部存儲而不是SDCARD –

+0

我已經更新了我的答案。 –