Androidアプリ作成[4] ファイル保存編

アイキャッチ画像
SBMJOB

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
GitHub - sbmjob/AppStudy18 Contribute to sbmjob/AppStudy18 development by creating an account on GitHub.

今回使ったソースはGithubに保管しております。

まとめ

ファイルとして出力保管するのは意外と簡単ですね。これはデータ保管方法の一つで単なる文字列形式なので今後はデータベースに保管するパターンも投稿します。

スポンサーリンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

システム開発SE・アプリ開発・デバッガー等々なんでもやる猫の下僕です。現在は凶暴猫にカタカタ動く手を狙われながらキーボードを打っています。かなりゆるい性格なのでコメントやメッセージお気軽に〜お仕事のご依頼もお気軽にぃ〜

スポンサーリンク

コメント

コメントする

CAPTCHA


目次