在我的Kotlin项目的src / resources /文件夹中,我具有文件pair_ids.txt。
此处代码: 这是一个属性文件:
key=value
所有行数均为 1389 。
这里的代码逐行读取该文件的内容。
import org.slf4j.LoggerFactory
private val logger = LoggerFactory.getLogger("Exchange")
private var allSymbolsIDsMap: Map<String, String> = mapOf()
val pairsIDs = getResourceAsText("/pairs_ids.txt")
allSymbolsIDsMap = pairsIDs.split(",").associate {
val (left, right) = it.split("=")
left to right.toString()
}
logger.info("allSymbolsIDsMap_size = " + allSymbolsIDsMap.size)
var countAllSymbolHandler = 0
for ((key, value) in allSymbolsIDsMap) {
countAllSymbolHandler++
logger.info("countAllSymbolHandler = $countAllSymbolHandler")
}
private fun getResourceAsText(path: String): String {
return object {}.javaClass.getResourceAsStream(path).bufferedReader().use { it.readText() }
}
结果:
开始项目:
allSymbolsIDsMap_size = 1389
Start project - "countAllSymbolHandler =" print 1113 times
再次启动项目:
allSymbolsIDsMap_size = 1389
"countAllSymbolHandler =" print 242 times
如果将logger.info
替换为简单的println
,则说明成功。计数始终为 1389 。
为什么循环(for)在 logger 中无法正常工作?
答案 0 :(得分:0)
尝试:
override fun run(configuration: AppConfig?, environment: Environment?) {
val logger = LoggerFactory.getLogger(this::class.java)
javaClass.getResourceAsStream("/pairs_ids.txt").bufferedReader().use { reader -> reader.readLines() }.forEach { line -> logger.info(line) }
}
在使用输入/输出流时,请使用Kotlin的use
扩展方法,并在use
块内进行所有处理。
这将处理所有打开和关闭流的操作,以确保没有泄漏或忘记关闭/冲洗等。