Kotlinでのファイル入出力とストリーム処理の基礎と実践【Kotlin入門⑩】

ファイル入出力の基本

Kotlinでは、標準ライブラリを活用して簡単にファイルの読み書きができます。特にjava.iokotlin.ioパッケージを使用すると、シンプルなコードでファイル操作が可能です。

ファイルの読み込み

ファイルを読み込む方法はいくつかあります。最も簡単なのは、readText()を使ってファイルの内容を文字列として取得する方法です。

import java.io.File

fun main() {
    val file = File("example.txt")
    val content = file.readText()
    println(content)
}

この方法はファイル全体を一度に読み込むため、大きなファイルには向いていません。

readLines()を使った行ごとの読み込み

readLines()メソッドを使用すると、ファイルの各行をリストとして取得できます。

val lines = File("example.txt").readLines()
lines.forEach { println(it) }

useLines()を使った効率的な読み込み

メモリ効率を考慮する場合は、useLines()を使用するとストリームを活用できます。

File("example.txt").useLines { lines ->
    lines.forEach { println(it) }
}

ファイルの書き込み

ファイルにデータを書き込むには、writeText()appendText()を使用します。

writeText()でファイルを新規作成または上書き

val file = File("output.txt")
file.writeText("Hello, Kotlin!")

appendText()で既存のファイルに追記

file.appendText("\nThis is a new line.")

ストリーム処理の基礎

ファイルが大きい場合、ストリームを使ってデータを少しずつ処理することが重要です。

BufferedReaderを使った効率的な読み込み

import java.io.BufferedReader
import java.io.File

fun main() {
    val file = File("largeFile.txt")
    file.bufferedReader().use { reader ->
        reader.forEachLine { println(it) }
    }
}

BufferedWriterを使った効率的な書き込み

import java.io.BufferedWriter
import java.io.File

fun main() {
    val file = File("output.txt")
    file.bufferedWriter().use { writer ->
        writer.write("This is a buffered write operation.")
    }
}

ファイル入出力の応用

CSVファイルの読み書き

CSV(カンマ区切り値)ファイルを読み書きするには、行を分割して処理するのが一般的です。

CSVの読み込み

val csvFile = File("data.csv")
csvFile.readLines().forEach { line ->
    val values = line.split(",")
    println(values)
}

CSVの書き込み

val outputCsv = File("output.csv")
outputCsv.writeText("Name, Age, City\n")
outputCsv.appendText("Alice, 30, Tokyo\n")
outputCsv.appendText("Bob, 25, Osaka\n")

バイナリファイルの読み書き

バイナリデータを扱う場合は、InputStreamOutputStreamを使用します。

バイナリファイルの読み込み

import java.io.File

fun main() {
    val file = File("image.png")
    val bytes = file.readBytes()
    println("Read ${bytes.size} bytes")
}

バイナリファイルの書き込み

val file = File("copy.png")
file.writeBytes(bytes)

まとめ

本記事では、Kotlinにおけるファイル入出力とストリーム処理について解説しました。

  • テキストファイルの基本的な読み書きreadText(), writeText() など)
  • ストリームを活用した効率的な処理bufferedReader(), useLines() など)
  • CSVファイルの操作split(), appendText() など)
  • バイナリファイルの処理readBytes(), writeBytes()

ファイル処理の基本を押さえ、安全かつ効率的なプログラムを書けるようになりましょう。