テキストファイルからの読み込み
主に、File.readText()、BufferedReader.readLines()、BufferedReader.use、BufferedReader.useLinesを紹介します。
File.readText()でテキストファイルを読み込む。
File.readText()
を使うと、テキストファイルの内容をString
として取得できます。
以下は、文字コードがUTF8の場合とSJISの場合のサンプルです。
文字コードがUTF8のファイルを読み込むサンプル
val file = File(textFilePath)
= file.readText() readedText
文字コードがSJISのファイルを読み込むサンプル
val file = File(textFilePath)
= file.readText(Charset.forName("MS932")) readedText
BufferedReader.readLines()でテキストファイルの読み込む。
BufferedReader.readLines()
を使うと、テキストファイルの内容をStream<String>
として取得できます。
なお、BufferedReader
のclose()
を呼び出す必要があるので、忘れないように注意してください。
文字コードがUTF8のファイルを読み込むサンプル
val file = File(textFilePath)
val bufferedReader = file.bufferedReader()
var lineNo = 1
.readLines().forEach {
bufferedReader("$lineNo: $it")
println++
lineNo}
.close() bufferedReader
文字コードがSJISのファイルを読み込むサンプル
val file = File(textFilePath)
val bufferedReader = file.bufferedReader(Charset.forName("MS932"))
var lineNo = 1
.readLines().forEach {
bufferedReader("$lineNo: $it")
println++
lineNo}
.close() bufferedReader
BufferedReader.useLinesでテキストファイルの読み込む。
BufferedReader.useLines
を使うと、テキストファイルの内容をStream<String>
として取得できます。
Stream<String>
として取得するとフィルタリングなどを容易に行えるため、便利です。
なお、BufferedReader.useLines
は自動的にファイルを閉じてくれるため、
BufferedReader
のclose()
を呼び出す必要はありません。
文字コードがUTF8のファイルを読み込むサンプル
val file = File(textFilePath)
val bufferedReader = file.bufferedReader()
val result = bufferedReader.useLines {
var lineNo = 1
.forEach {
it.add(it)
readedItems("$lineNo: $it")
println++
lineNo}
// ラムダ式は、kotlin.Unit型を返すことになっているため、今回は成功の「true」を返す。
true
}
("result : $result") println
文字コードがSJISのファイルを読み込むサンプル
val file = File(textFilePath)
val bufferedReader = file.bufferedReader(Charset.forName("MS932"))
val result = bufferedReader.useLines {
var lineNo = 1
.forEach {
it.add(it)
readedItems("$lineNo: $it")
println++
lineNo}
// ラムダ式は、kotlin.Unit型を返すことになっているため、今回は成功の「true」を返す。
true
}
("result : $result") println
BufferedReader.useでテキストファイルを一行ずつ読み込む。
File.readText()
、BufferedReader.readLines()
、BufferedReader.useLines
では、
テキストファイルを一度に読み込んでいるようです。よって、非常に大きなテキストファイルを
読み込む際にメモリが足りなくなる可能性があります。
そんな時は、BufferedReader.use
を使い、BufferedReader.readLine()
で一行ずつ読み込み、
必要な情報のみをメモリ上に残すようにしましょう。
なお、BufferedReader.use
は自動的にファイルを閉じてくれるため、
BufferedReader
のclose()
を呼び出す必要はありません。
文字コードがUTF8のファイルを読み込むサンプル
val file = File(textFilePath)
val bufferedReader = file.bufferedReader()
val result = bufferedReader.use {
var lineNo = 1
var lineText: String?
while (true) {
// 一行ずつ読み込む。
= it.readLine()
lineText if (lineText == null) {
break
}
.add(lineText)
readedItems("$lineNo: $lineText")
println++
lineNo}
// kotlin.Unit型を返すことになっているため、今回は成功の「true」を返す。
true
}
("result : $result") println
文字コードがSJISとなっているテキストファイルを読み込む。
File.readText()
やFile.bufferedReader()
の引数にCharset
を指定することにより、
読み込むファイルの文字コードを指定できますが、Chsrsets
にSJIS
が登録されていません。
よって、以下のようにCharset.forName("MS932")
と指定することにより、
SJIS
の文字コードのテキストファイルを読み込むことができるようになります。
File.readText()の場合
val text = File.readText(Charset.forName("MS932"))
File.bufferedReader()の場合
val bufferedReader = File(testFilePath).bufferedReader(Charset.forName("MS932"))