Androidプログラミング

【Android】ファイルの保存・読み込む2つの方法【Kotlin】

Androidのファイル保存・読み取り記事のアイキャッチ画像 Android

Androidのアプリ開発において活躍するファイルの保存・読み込み方法を2つ紹介します。アプリ内で使用する設定ファイルやテキストの保存・読み込みに活用できます。

スポンサーリンク

Androidアプリにおけるファイル保存について

Androidのファイルの保存先(ストレージ)は以下の3種類あります。

  • アプリ内内部ストレージ
  • アプリ内外部ストレージ
  • 共有ストレージ

今回は設定ファイルを保存する想定で、他アプリから読み込まれない内部ストレージに保存するサンプルを作成しました。

スポンサーリンク

ファイルの保存・読み込むのサンプル(Kotlin)

テキストファイルを保存、読み取りをします。

サンプル①:FileWriterを使う方法

ファイルの保存先は、applicationContext.filesDirで取得できます。
取得されるパスは「/data/user/0/パッケージ名/files」になります。

class MainActivity :  AppCompatActivity() {
    //ファイル変数を宣言
    private lateinit var txtfile: File

    override fun onCreate(savedInstanceState: Bundle?) {

        /*    色々省略    */

        // ファイル名
        val filename="testfile.txt"
        //ファイル変数にパスとファイル名を設定
        txtfile = File(applicationContext.filesDir, filename)
    }
}


/*以下ファイル保存・読み取りメソッド(ボタンタップなどで呼び出す)------------------*/
//ファイルの保存(保存したい文字列savetextを受け取る)
private fun saveFile(savetext:String?){
    try{
        // ファイルの書き込み
        FileWriter(txtfile).use{ stream -> stream.write(savetext) }
    }catch (e: IOException){
        Log.d("Error","File Save Error!")
    }
}

//ファイルの読み込み(読み取った文字列readtextを返す)
private fun readFile():String?{
    //読み取った内容を変数textに書き込む
    var readtext: String? = null
    try{
        BufferedReader(FileReader(txtfile)).use { br -> readtext = br.readLine() }
    }catch(e: IOException){
        Log.d("Error","File Read Error!")
    }
    return readtext
}

サンプル②:openFileOutput,openFileInputを使う方法

class MainActivity :  AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {

        /*    色々省略    */

        // ファイル名
        val filename="testfile.txt"
    }
}

/*以下ファイル保存・読み取りメソッド(ボタンタップなどで呼び出す)------------------*/
//ファイルの保存(保存したい文字列savetextを受け取る)
private fun saveFile(savetext:String){
    try{
        openFileOutput( filename, Context.MODE_PRIVATE).use{
                fileOutputstream -> fileOutputstream.write(savetext.toByteArray())}
    }catch (e: IOException){
        Log.d("Error","File Save Error!")
    }
}

//ファイルの読み込み(読み取った文字列readtextを返す)
private fun readFile():String?{
    var readtext: String? = null
    try{
        openFileInput(filename).use{
            fileInputStream -> BufferedReader(InputStreamReader(fileInputStream, StandardCharsets.UTF_8)).use {
                reader ->
            var lineBuffer: String?
            while(br.readLine().also{ br = it} != null){
                readtext = lineBuffer
            }
        }}
    }catch(e: IOException){
        Log.d("Error","File Read Error!")
    }
    return readtext
}
スポンサーリンク

さいごに

2つの方法を紹介しましたが、個人的には差をあまり感じません。スコープ関数の少ないほうが自分は記載がしやすいかな。。。

以下Android関連記事など。

コメント

タイトルとURLをコピーしました