1. ホーム
  2. android

[解決済み] Android でファイルを作成しようとしています: 開くことに失敗しました。EROFS (読み取り専用ファイルシステム)

2022-02-17 15:14:22

質問

この行は。

final FileOutputStream outputStream = new FileOutputStream(name);

の結果は FileNotFoundException であり、メッセージは /2ozjfFQzwv: open failed: EROFS (Read-only file system) ここで、"2ozjfFQzwv"は、私がファイル名として渡したものです。

を付けた場合と付けない場合で試してみました。 WRITE_INTERNAL_STORAGE のパーミッションが必要です。このファイルを書き込み用に作成するにはどうしたらよいですか?

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

解決方法は?

<ブロッククオート

WRITE_INTERNAL_STORAGEパーミッションがある場合とない場合で試してみました。

はありません。 WRITE_INTERNAL_STORAGE というパーミッションがあります。

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

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

のバージョンでお願いします。 FileOutputStream コンストラクタは File オブジェクトを作成します。その File オブジェクトを作成し、そのオブジェクトに書き込むことができます。

  • getFilesDir() (あなたの Activity または他の Context )
  • getExternalFilesDir() (あなたの Activity または他の Context )

後者では WRITE_EXTERNAL_STORAGE をパーミッションとして指定します。

ファイルに書き込んでからまた読み込むより簡単な方法はありますか?

静的データメンバに一時的に入れておくとよいでしょう。

SDカードスロットを持たない人が多いため

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