Androidでのデータ保管は複数のやり方があり、ファイルに保存する方法、データベースに保存する方法、アプリ設定情報に保存する方法などありますが、今回は一番簡単はopenFileInput openFileOutputでファイルに保存し読み込む方法を説明します。
完成イメージ
- ボタンとEditTextを配置する
- アプリ起動時にはfileOutput.datが存在したら内容をEditTextにセットする
- EditViewに書き込まれた文字列を保存ボタンでfileOutput.datに保管する
機能としてはシンプルですが、ファイルに文字列を保管し読み出すことを練習します。
画面レイアウト
ボタンとEditTextをレイアウトするだけですが、複数行対応のためInputTypeにtextMultiLineを設定します。
package com.example.appstudy18
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import java.lang.StringBuilder
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val str = StringBuilder()
val txtMemo = findViewById<EditText>(R.id.txtMemo)
//①保管されているmemo.datを読み込む fileOutput.datが存在しない時はException
try {
openFileInput("fileOutput.dat")
.bufferedReader().forEachLine {
str.append(it)
str.append(System.getProperty("line.separator"))
}
txtMemo.setText(str.toString())
}catch(e: Exception){
txtMemo.setText("")
}
val btn = findViewById<Button>(R.id.btnSave)
//②保管処理 fileOutput.datが存在してもしなくても例外処理が不要
btn.setOnClickListener {
openFileOutput("fileOutput.dat", MODE_PRIVATE)
.bufferedWriter().use {
it.write(txtMemo.text.toString())
}
}
}
}
MainActivityは上記のように、アプリ起動時にTry-Catch-Exceptionで保存ファイルの読み込みを行います。ボタンが押されたらEditTextの内容をファイルに保存します。読み込みを書き込みもfileOutput.datに行います。
①保管されているmemo.datを読み込む
//①保管されているmemo.datを読み込む fileOutput.datが存在しない時はException
try {
openFileInput("fileOutput.dat")
.bufferedReader().forEachLine {
str.append(it)
str.append(System.getProperty("line.separator"))
}
txtMemo.setText(str.toString())
}catch(e: Exception){
txtMemo.setText("")
}
アプリ起動時に「fileOutput.dat」を読み込んでtxtMemoに文字列をセットし表示させたいのですが、初めてこのアプリを起動するときはfileOutput.datファイルが作成されていない状態なので、例外処理をキャッチするTry-catch-Exceptionを仕掛けておいきます。
また、ファイルの読み込みはopenFileInputでfile名を指定して開きます。
ファイルを開いたら、forEachLineで読み込んだ一行ずつ文字列変数strにappendしながら追加していきます。改行はline.separetorで制御しています。読み込みが終わったらstr.toString()でtxtMemoに流し込みます。
fileOutput.datが存在しない場合はtxtMemoに何もセットしません。
②保管処理 fileOutput.dat
//②保管処理 fileOutput.datが存在してもしなくても例外処理が不要
btn.setOnClickListener {
openFileOutput("fileOutput.dat", MODE_PRIVATE)
.bufferedWriter().use {
it.write(txtMemo.text.toString())
}
}
ボタンが押されたらファイル出力処理をします。
「fileOutput.dat」が存在してもしなくても無関係でtxtMemoの文字列をfileOutput.datファイルを作成し出力または上書きします。
ファイルの保管場所
View>Tool Windows>Device File Explorerから端末内のファイルを確認できます。
保管される場所は
data>data>アプリケーション名>file
Github
今回使ったソースはGithubに保管しております。
まとめ
ファイルとして出力保管するのは意外と簡単ですね。これはデータ保管方法の一つで単なる文字列形式なので今後はデータベースに保管するパターンも投稿します。
コメント