2013-03-30 2 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"))); 

потому что в настоящее время вы не проезжаете путь к каталогу с файлом.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

Вы можете написать в Internal Storage с помощью 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

Я обновил свой ответ. –

Смежные вопросы