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

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

Android Studio 3.5.3
API 29

 



内部ストレージ

 
ストレージ オプション | 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フォーム

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

 

アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう。

オンラインスクールは色々ありますが、以下の3つはAndroidが学習できる老舗スクールです。


TECH ACADEMY
Androidアプリコース


こういうものではアプリ作れないと言う意見もありますが、それは結局本人のやる気があるかないかです。やる気があっても独学では突破しにくいところは教えてもらうのが一番早い。


侍エンジニア塾
侍エンジニア塾 無料体験レッスン


とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


CodeCamp
~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp




直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。


無料で転職まで
これはアプリ限定ではありませんが無料です
その代わり就職することを前提にしたスクールでエンジニアになって職を得たいのであれば手っ取り早いかもしれません




シェアする

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

フォローする