[Android & Kotlin] 内部ストレージにファイルを保存する

ファイルを保存したい場合、アプリのプライベートなローカルストレージに保存したり読み出したりできます。
 
下の例は、 EditText で入力した文字列を testfile.txt というファイルに入れて保存し、そのファイルから読み出す例です。その後run-asを使ってアプリ内にあるファイルと文字列を確認しました。
 
fileinout a01 - [Android & Kotlin] 内部ストレージにファイルを保存する

Android Studio 3.1.4
API 28
Kotlin 1.2.61

 



内部ストレージ

 
ストレージ オプション | Android Developers に説明がありますが、ストレージには「内部」ストレージと「外部」ストレージがあります。ここではこの内部ストレージにデータを保存させることが目的です。

  • 内部ストレージ: Internal Storage
    • 常に使用できる
    • ここに保存されたファイルは、自分のアプリからのみアクセスできます。
    • ユーザーがアプリをアンインストールすると、システムは内部ストレージから当該アプリのファイルをすべて削除します。
    • ユーザーからも他のアプリからも、自分のファイルにアクセスできないようにしたい場合、内部ストレージが最適です
  • 外部ストレージ:External Storage
    • 誰でも読み取り可能なため、ここに保存されたファイルは自分のコントロールの及ばない所で読み取られる可能性があります
    • 以前はSDカードを共有メモリとしていたが、最近では内部にある共有メモリ領域がむしろメイン領域となっている

References:
内部ストレージを使用する | Android Developers
外部ストレージを使用する | Android Developers

storage 01 - [Android & Kotlin] 内部ストレージにファイルを保存するざっくりこんな感じ

 
 

 

ファイル保存

 
java.io.FileクラスのFile()を使うと新規ファイルを作成できます。作成するディレクトリを指定するためにContext.fileDirで取得します。文字列のファイルへの書き込みにはwrite()を使います。

またJavaではリソースが解放されたままにならないように、finallyでclose()させるか、try-with-resourcesを使いましたが同じようなものとしてKotlinには .use があります。
 

 
別の方法として、Javaと同じようにopenFileOutputを使いMODE_PRIVATE、MODE_APPENDを指定して保存する方法。内部ストレージなのでPrivateはあまり意味はありませんが、Appendの追加書込みは使えるケースもあるかもしれません。
 

 
実際の保存場所は /data/data/app_package_name/files/ 以下にあります。
 
adb shell コマンドではセキュリティーでブロックされて見えませんが、run-as を使えば見ることはできます。
 
try-catch:
Write a file | Save files on device storageを見るとこの箇所の例がJavaとKotlinで説明されています。Javaではtry-catchで検査例外しないとコンパイルエラーとなりますが、Kotlinではエラーになりません。例ではKotlinではtry-catchは入っていません。それは入れなくていいということでしょうか?というご意見もあります。内部ストレージなのでそもそもそこまでやる必要がないのかもしれませんが…(日和見です)

 

ファイル読出し

 
読み出しでは、bufferReader()を使うことができます。読出しの場合はファイルが存在するか確認する必要があります。

 

サンプルコード

 
まとめのコードです

MainActivity.kt

 
レイアウト
activity_main.xml

 
リソースファイル
strings.xml

 

 
実際に保存したファイルを確認するときは
Android Studio 3.0から
Device File Explorer
を使うと確認できます。昔はADMと呼ばれていました、もっと昔にはDDMSと呼ばれていましたね…
Android Device Monitor, DDMS で確認

/data/data/[package_name]/files/以下に testfile.txt があり、クリックすると中身もわかります。

fileinout a02 - [Android & Kotlin] 内部ストレージにファイルを保存する
 
実機では
run-as [package name] をコマンドで打ち込んで確認できます
adb, run-as でローカルストレージ内をのぞく
 
 
References:
Context
View On-Device Files with Device File Explorer | Android Studio

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加


 


ページのトップへ戻る




シェアする

  • このエントリーをはてなブックマークに追加

フォローする