web-dev-qa-db-ja.com

Android Internal Storage?にファイルを作成する方法は?

内部ストレージのファイルを特定のフォルダーに保存したい。私のコードは:

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:読み取り専用ファイルシステム」という例外が発生します。フォルダーメディアの内部電話ストレージにファイルを書き込む方法はありますか?ありがとう。

26
Buda Gavril

次のように ContextWrapper を使用する必要があります。

ContextWrapper cw = new ContextWrapper(context);
File directory = cw.getDir("media", Context.MODE_PRIVATE);

いつものように、 documentationContextWrapper を参照してください。

23
Audrius

getLocalPath()が返すものに追加されるmedia dirを作成する必要があります。

2
Lucas S.

私も同じ正確なエラーを取得していました。これが修正です。書き込み先を指定する場合、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
styler1972

ファイルの書き込み

ファイルを内部ストレージに保存する場合、次の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.

注意:システムのストレージが不足すると、警告なしにキャッシュファイルが削除される場合があります。

0
Magnetron