【Kotlin/Android】Fileクラスの使い方!データの読み取り/書き込み

【Kotlin/Android】Fileクラスの使い方!データの読み取り/書き込み

この記事からわかること

  • Android Studio/Kotlinデータファイル保存する方法
  • Fileクラス使い方
  • 読み込み/書き込みの実装

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

Fileクラス

公式リファレンス:java.io.File

KotlinのFileクラスはファイル操作できる機能が提供しているクラスです。ファイルの作成や読み取り、書き込み、削除などの操作を簡単に行うことができます。

引数にはファイル名、もしくはパスを渡すことでインスタンス化できます。

// /example.txt
val file = File("example.txt")

// myApp/example.txt
val file = File("myApp/example.txt")

// myApp/example.txt
val file = File("myApp", "file.txt")

内部ストレージへ保存する

実際にファイルを保存する際に内部ストレージを活用します。内部ストレージはアプリが独自にファイルを保存するための領域で他のアプリからアクセスされないように保護されており、アプリがアンインストールされると一緒に削除されます。

内部ストレージへのパス(/data/user/0/パッケージ名/files)はfilesDirを使用して取得できます。

val file = File(this.filesDir, "example.txt")

内部ストレージを指定せずに書き込み処理を行おうとするとEROFS (Read-only file system)(読み取り専用)エラーが発生するようです。

val file = File("example.txt")
// 書き込み処理
example.txt: open failed: EROFS (Read-only file system)

書き込み処理

書き込み処理を行うにはwriteTextメソッドを使用します。引数に書き込みたい内容を渡します。書き込みや読み取りなどのほとんどのファイル操作はIOExceptionをスローする可能性があるのでtry〜catchなどでエラーハンドリングを行う必要があります。

val file = File(this.filesDir, "example.txt")

try {
    file.writeText("Hello World")
} catch (e: IOException) {
    Log.e("File", "書き込みエラー: ${e.message}")
}

追記:appendText

writeTextメソッドは既存の内容を上書きしてしまうので追記したい場合はappendTextメソッドを使用します。

file.appendText("\nこんにちは世界。")

読み取り処理

読み取り処理を行うにはreadTextメソッドを使用します。ファイルに書き込まれている内容を全て取得することが可能です。

val file = File(this.filesDir,"example.txt")

try {
    val content = file.readText()
    Log.e("File", content)
} catch (e: IOException) {
    Log.e("File", "読み取りエラー: ${e.message}")
}

この際にそもそもファイル自体が存在しないととENOENT (No such file or directory)(ファイルが見つからない)エラーが発生します。

open failed: ENOENT (No such file or directory)

1行ずつ読み込む:readLines

ファイルの内容を1行ずつ取得したい場合はreadLinesメソッドを使用します。List<String>型で文字列を取得できます。

val lines: List<String> = file.readLines()
// 1行ずつ取得する
for (line in lines) {
    println(line)
}

バイナリデータとして読み込む:readBytes

String型ではなくバイナリデータとして読み込みたい場合readBytesメソッドを使用します。ByteArray型で取得することができます。

val bytes: ByteArray = file.readBytes()

空のファイルを作成する

ENOENT (No such file or directory)エラーを発生させないために空のファイルを作成することも可能です。createNewFileメソッドで空のファイルを生成できます。

file.createNewFile()

ディレクトリを作成したい場合mkdirメソッドを使用します。

val dir = File("exampleDir")
dir.mkdir()

ファイルを削除する

ファイルを削除するにはdeleteメソッドを使用します。返り値で削除成功かどうかを取得できます。

val isDeleted = file.delete()

存在するかどうか

ファイルが存在するかどうかを識別するにはexistsメソッドを使用します。

if (file.exists()) {
    println("存在するよ")
}

その他のメソッド

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index