61

この行:

final FileOutputStream outputStream = new FileOutputStream(name);

「 2ozjfFQzwv 」がファイルの名前として渡されたものであるFileNotFoundExceptionというメッセージが表示されます。/2ozjfFQzwv: open failed: EROFS (Read-only file system)

WRITE_INTERNAL_STORAGE私は許可の有無にかかわらずこれを試しました。書き込み用にこのファイルを作成するにはどうすればよいですか?

または、新しいアクティビティに画像を提供できるようにしたいだけですが、サイズが大きすぎて追加でシリアル化できません。ファイルに書き込んでから再度読み取るよりも簡単な方法はありますか? ここでのすべての質問は、SD カードへの書き込みに関するものであるように思われますが、多くの人が SD カード スロットを持っていないため、私はそうしたくありません。

4

8 に答える 8

93

WRITE_INTERNAL_STORAGE 権限の有無にかかわらず、これを試しました。

WRITE_INTERNAL_STORAGEAndroidには許可がありません。

書き込み用にこのファイルを作成するにはどうすればよいですか?

アプリがスーパーユーザー権限で実行されている場合は、おそらくルート化されたデバイスを除いて、そうしません。アプリがアクセスできない内部ストレージのルートに書き込もうとしています。

オブジェクトFileOutputStreamを取るバージョンのコンストラクタを使用してください。次のような書き込み可能な場所に基づいて、そのオブジェクトをFile作成します。File

  • getFilesDir()(あなたActivityまたは他の人に呼び出されますContext
  • getExternalFilesDir()(あなたActivityまたは他の人に呼び出されますContext

後者はWRITE_EXTERNAL_STORAGE許可として必要になります。

ファイルに書き込んでから再度読み取るよりも簡単な方法はありますか?

一時的に静的データ メンバーに入れることができます。

多くの人がSDカードスロットを持っていないので

「SDカードスロット」は、概して無関係です。Android デバイス ユーザーの 99% は外部ストレージを持っています。例外は、ユーザーが SD カードを取り外した 4 年以上前のデバイスです。2010 年半ば以降に製造されたデバイスには、リムーバブル メディアとしてではなく、オンボード フラッシュの一部として外部ストレージが搭載されています。

于 2013-03-29T20:54:53.020 に答える
17

WRITE_EXTERNAL_STORAGE の許可を使用してみてください。外部カードの有無にかかわらず、それを使用する必要があります。

これは私にとってはうまくいきます:

path = Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_MOVIES);
File file = new File(path, "/" + fname);

ファイルを適切なフォルダに配置します

于 2013-03-29T21:40:25.040 に答える
6

追加する

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

マニフェストでMartinと同じものを使用:

path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES); 
File file = new File(path, "/" + fname);

出来た。

于 2014-04-22T21:04:49.807 に答える
6

Android 開発者の簡単なサンプルを次に示します。

基本的に、次のように内部ストレージにファイルを書き込むことができます:

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

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
于 2013-03-29T20:58:30.297 に答える
3

他の人が述べたように、Android のアプリは、内部ストレージのフォルダーにファイルを書き込むことはできませんが、独自のプライベート ストレージ ( /data/data/PACKAGE_NAME の下にあります) に書き込むことはできません。

API を使用して、アプリに許可されている正しいパスを取得する必要があります。

これを読んでください。

于 2013-03-29T21:18:01.460 に答える