Aki*_*ido 26 java bufferedreader kotlin
所以我刚开始使用Kotlin for Android,并将我的Android Java代码转换为Kotlin.
在其中一次转换中,我偶然发现了一个BufferedReader,我通常用Java编写如下:
String result = "";
String line = "";
BufferedReader reader = new BufferedReader(someStream);
while ( (line = reader.readLine()) != null ) {
result += line;
}
Run Code Online (Sandbox Code Playgroud)
但是在Kotlin中,似乎Kotlin不允许我在条件的同时为变量赋值.
目前,我已经编写了如下代码:
val reader = BufferedReader(someStream)
var line : String? = ""
while (line != null) {
line = reader.readLine()
result += line
}
Run Code Online (Sandbox Code Playgroud)
尽管使用了Kotlin,但我并不觉得这么优雅而且感觉很流行.
在Kotlin中使用BufferedReader的最佳方法是什么?
mie*_*sol 56
您可以使用bufferedReader
像这样
val allText = inputStream.bufferedReader().use(BufferedReader::readText)
Run Code Online (Sandbox Code Playgroud)
小智 16
如果您仍想逐行阅读,可以使用std lib中的一些扩展函数,并按如下方式执行:
val reader = someStream.bufferedReader()
val iterator = reader.linesSequences().iterator()
while(iterator.hasNext()) {
val line = iterator.next()
// do something with line...
}
reader.close()
Run Code Online (Sandbox Code Playgroud)
或者,使用"功能"方法:
val reader = someStream.bufferedReader()
reader.useLines {
it.map { line -> // do something with line }
}
Run Code Online (Sandbox Code Playgroud)
通过使用useLines,您不需要在阅读器上显式调用close,useLines扩展函数将为您完成!
只是添加那些参考..干杯
Ang*_*Koh 13
您也可以尝试使用“forEachLine”方法。
val file = File("./folder/test.txt")
file.bufferedReader().forEachLine {
println("value = $it")
}
Run Code Online (Sandbox Code Playgroud)
它还会在阅读最后一行后自动关闭流
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/java.io.-reader/index.html
fun Reader.forEachLine(action: (String) -> Unit)
遍历此读取器的每一行,为读取的每一行调用操作并在完成时关闭读取器。
另一种方法是使用 for 循环:
val reader = BufferedReader(someStream)
for (line in reader.lines()) {
println(line)
}
Run Code Online (Sandbox Code Playgroud)
虽然它不像公认的答案那么简洁,但它允许您循环并执行某种逻辑,而无需将所有内容都放入一个字符串中,如下所示
val allText: String = inputStream.bufferedReader().use(BufferedReader::readText)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13485 次 |
最近记录: |