【Kotlin/Android】Fileクラスの使い方!データの読み取り/書き込み
この記事からわかること
- Android Studio/Kotlinでデータをファイルへ保存する方法
- Fileクラスの使い方
- 読み込み/書き込みの実装
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Android Studio:Koala
- Kotlin:1.8.20
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("存在するよ")
}
その他のメソッド
- copyTo(): ファイルのコピー
- moveTo(): ファイルの移動
- forEachLine(): 各行を処理する
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。