[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フォーム

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




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

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

以下の3つはAndroidが学習できるオンラインスクールです。


TECH ACADEMY
Androidアプリコース



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



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





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

尚、スクールがダメだと言う人がいますが、やる気があれば問題ありません。与えられるのを待っていてはいけないですね
欲しいものは取りに行くのです。


Google Pixel 3 XLグローバル版
SIMフリー 並行輸入品
6.3インチの大画面
背景をぼかすポートレートモード撮影


Anker PowerCore II Slim 10000
Power IQ 2.0搭載
iPhone & Android対応

シェアする

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

フォローする