我正试图围绕文件流处理。输入看起来像这样:
bla
blubb
blubber
testcode
有几个文件都像上面那样。现在,我正在使用单个文件方法将整个文件读入内存并将其拆分:
Files.newBufferedReader("myfile").use { f ->
f.readText().splitToSequence("\n\n").forEach {
// do my stuff
}
}
现在,我试图将其推广到更大的输入(使文件在内存中保存不切实际)和几个文件。理想情况下,我将输入文件的整个目录视为我在\n\n
上拆分的单个流行,并处理这些部分。我该怎么做?
答案 0 :(得分:4)
您可以将文件读取为一系列文本行,然后重新组合这些以空行作为分隔符的行:
File("myfile").useLines { lines ->
val lineBlocks: Sequence<List<String>> = buildSequence {
val block = mutableListOf<String>()
for (line in lines) {
when {
line.isNotEmpty() -> block.add(line)
block.isNotEmpty() -> {
yield(block.toList())
block.clear()
}
}
}
if (block.isNotEmpty()) yield(block.toList())
}
lineBlocks.forEach {
println(it.joinToString())
}
}
在这里,您可以得到lineBlocks
中的结果,这是一个序列,其中每个元素都是单个块中的行列表。