2012-02-21 20 views
1
File mediaDir = new File("media"); 
if (!mediaDir.exists()){ 
    mediaDir.createNewFile(); 
    mediaDir.mkdir(); 

} 

File f = new File("/data/data/com.test.image/files/media/Voucher.jpg"); 
f.createNewFile(); 
FileOutputStream fos = new FileOutputStream(f); 
fos.write(b); 
fos.close(); 

は、携帯電話内部メモリにファイルを書き込みますが、それはエラーをスローするようにしてください:にjava.io.IOException:読み取り専用ファイルシステムにjava.io.IOException:読み取り専用ファイルシステム

答えて

2

推測/データ/データは外部記憶装置ではありません。/dataディレクトリに書き込むには、root権限が必要です。参照してくださいData directory has no read/write permission in Android

+0

AndroidManifest.xmlにあるを追加しました。 –

+0

はあなたの携帯電話に根ざしていますか? – user936414

+0

ルートされていない場合、/ dataには書き込み権限がありません。 http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app – user936414

0

使用mediaDir.mkdirs(); の代わりに mediaDir.mkdir();あなたも必要ですWRITE_EXTERNAL_STORAGE許可

+0

同じ問題を起こすと、同じエラーが発生します....さらに、

0

あなたはアプリケーションが許可されていないAndroidシステムのルートディレクトリにファイルを作成しています。

アプリケーション固有のディレクトリを作成するには、new File("media")の代わりにgetDir(String dirName, int mode)を使用します。呼び出すだけで、メディアディレクトリを作成して使用することができます。

あなたの上記のコードで何をしているのか、多くのことをする必要はありません。マニフェストにも許可を与える必要はありません。

+2

あなたが答えを受け入れたにもかかわらず、私はそれがあなたが探していたものだとは思わない。/data/dataは、すべてのアプリケーションパッケージがインストールされるディレクトリです。アプリケーションパッケージもこのディレクトリ(/ data/data /)にのみ保持されます。したがって、あなたのパッケージ名が** com.test.image **であるとすると、パスが/data/data/com.test.image/app_mediaのメディアディレクトリが作成されます。したがって、あなたがアクティビティ/コンテキストのgetDirメソッドを使用する場合、この/ data/dataフォルダに直接アクセスしてファイルを書き込むこともできます。マニフェストにパーミッションを書く必要はありません。 – AndroDev

関連する問題