デバイス ストレージにファイルを保存する

Android は、他のプラットフォームのディスクベース ファイル システムと同様のファイル システムを使用しています。このページでは、Android ファイル システムにおいて File API を使用してファイルの読み書きを行う方法について説明します。

File オブジェクトは、大量のデータをスキップせずに最初から最後まで順に読み書きするのに適しています。たとえば、ネットワーク経由で画像ファイルを交換する場合などにおすすめです。

ファイルを保存する場所の正確なパスはデバイスによって異なる場合があります。そのため、絶対ファイルパスを使用するのではなく、このページで説明している方法を使用して、内部ストレージパスや外部ストレージパスにアクセスすることをおすすめします。

デバイス上のファイルを表示するには、File.getAbsolutePath() などのメソッドで取得したファイルの場所をログに記録し、Android Studio の Device File Explorer を使用してデバイス ファイルをブラウジングします。

内部ストレージか外部ストレージのいずれかを選択する

Android デバイスには、必ず内部ストレージ外部ストレージという 2 つのファイル保存領域があります。この名前は、初期の Android デバイスのことの名残であり、当時はほとんどの Android デバイスが、内蔵型の不揮発性メモリ(内部ストレージ)と、microSD カードなどの取り外し可能なストレージ メディア(外部ストレージ)をサポートしていました。現在は、多くのデバイスにおいて、永続的ストレージ領域が「内部」パーティションと「外部」パーティションに分割されています。したがって、取り外し可能なストレージ メディアがない場合でも常に 2 つのストレージ領域が存在しており、API も、外部ストレージが取り外し可能かどうかにかかわらず、同じように動作します。

外部ストレージは取り外し可能な場合があるため、2 つのストレージ オプションには以下のような違いがあります。

内部ストレージ:

  • 常に利用できます。
  • ここに保存したファイルにアクセスできるのは、保存元のアプリだけに限られます。
  • ユーザーがアプリをアンインストールした場合、当該アプリのファイルはすべて自動的に内部ストレージから削除されます。

内部ストレージは、ユーザーからも他のアプリからも、ファイルにアクセスできないようにしたい場合に適しています。

外部ストレージ:

  • 常に利用できるとは限りません。ユーザーは USB ストレージなどを外部ストレージとしてマウントできますが、デバイスから取り外すこともあります。
  • ここに保存されたファイルは誰でも開くことができるため、作成元アプリの管理が及ばないところで読み取られる可能性があります。
  • ユーザーがアプリをアンインストールした場合、当該アプリのファイルが削除されるのは、getExternalFilesDir() からディレクトリ内に保存した場合に限られます。

アクセス制限を必要としないファイルや、他のアプリと共有する予定のファイル、パソコン経由のアクセスを許可するファイルの場合、外部ストレージが適しています。

注: アプリは、デフォルトでは内部ストレージにインストールされますが、マニフェスト内で android:installLocation 属性を指定すると外部ストレージにインストールすることができます。APK サイズが非常に大きく、内部ストレージ領域よりも外部ストレージ領域の方が大きい場合は、ユーザーがこちらのストレージ オプションを希望する可能性があります。詳細については、アプリのインストール場所をご覧ください。

参考リンク

デバイス ストレージに対するファイル保存の詳細については、以下のリソースをご覧ください。

コードラボ