内部ストレージのファイルを特定のフォルダーに保存したい。私のコードは:
File mediaDir = new File("media");
if (!mediaDir.exists()){
mediaDir.createNewFile();
mediaDir.mkdir();
}
File f = new File(getLocalPath());
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
fos.write(data);
fos.close();
getLocalPath
は/data/data/myPackage/files/media/qmhUZU.jpg
を返しますが、メディアフォルダーを作成しようとすると、「Java.io.IOException:読み取り専用ファイルシステム」という例外が発生します。フォルダーメディアの内部電話ストレージにファイルを書き込む方法はありますか?ありがとう。
次のように ContextWrapper を使用する必要があります。
ContextWrapper cw = new ContextWrapper(context);
File directory = cw.getDir("media", Context.MODE_PRIVATE);
いつものように、 documentation 、 ContextWrapper を参照してください。
getLocalPath()
が返すものに追加されるmedia
dirを作成する必要があります。
私も同じ正確なエラーを取得していました。これが修正です。書き込み先を指定する場合、Androidは自動的にパスを/data/
または/mnt/sdcard/
に解決します。説明しましょう。
次のステートメントを実行する場合:
File resolveMe = new File("/data/myPackage/files/media/qmhUZU.jpg");
resolveMe.createNewFile();
Androidのどこか上のルート/data/
へのパスを解決します。
次のコードを実行した後、ルート/mnt/
に自動的に配置されたため、自分で何も変換しなかったため、これを理解しました。
File resolveMeSDCard = new File("/sdcard/myPackage/files/media/qmhUZU.jpg");
resolveMeSDCard.createNewFile();
簡単な修正方法は、次のコードを変更することです。
File f = new File(getLocalPath().replace("/data/data/", "/"));
お役に立てれば
ファイルの書き込み
ファイルを内部ストレージに保存する場合、次の2つの方法のいずれかを呼び出すことにより、適切なディレクトリをファイルとして取得できます。
getFilesDir()
Returns a File representing an internal directory for your app.
getCacheDir()
Returns a File representing an internal directory for your
app's temporary cache files.
Be sure to delete each file once it is no longer needed and implement a reasonable
size limit for the amount of memory you use at any given time, such as 1MB.
注意:システムのストレージが不足すると、警告なしにキャッシュファイルが削除される場合があります。