web-dev-qa-db-ja.com

Android-読み取り専用ファイルシステムIOException

Androidシステム上のシンプルなテキストファイルに書き込もうとしています。これは私のコードです:

public void writeClassName() throws IOException{
    String FILENAME = "classNames";
    EditText editText = (EditText) findViewById(R.id.className);
    String className = editText.getText().toString();

    File logFile = new File("classNames.txt");
       if (!logFile.exists())
       {
          try
          {
             logFile.createNewFile();
          } 
          catch (IOException e)
          {
             // TODO Auto-generated catch block
             e.printStackTrace();
          }
       }
       try
       {
          //BufferedWriter for performance, true to set append to file flag
          BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true)); 
          buf.append(className);
          buf.newLine();
          buf.close();
       }
       catch (IOException e)
       {
          // TODO Auto-generated catch block
          e.printStackTrace();
       }

ただし、このコードは「Java.io.IOException:open failed:EROFS(Read-only file system)」エラーを生成します。次のようにマニフェストファイルにアクセス許可を追加しようとしましたが、成功しませんでした。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="hellolistview.com"
Android:versionCode="1"
Android:versionName="1.0" >

<uses-sdk Android:minSdkVersion="15" />

<application
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name" >
    <activity
        Android:name=".ClassView"
        Android:label="@string/app_name" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

     <activity 
        Android:name=".AddNewClassView" 
        />

</application>
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

誰も問題が何であるか考えていますか?

16
John Roberts

ファイルをルートに書き込もうとしているため、ファイルパスをファイルディレクトリに渡す必要があります。

String filePath = context.getFilesDir().getPath().toString() + "/fileName.txt";
File f = new File(filePath);
73
Jug6ernaut

開発者ガイドのこの article からアプローチを使用してみてください。

String FILENAME = "hello_file";
String string = "hello world!";

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
3
Andrey Ermakov