如何在没有javaClass的情况下从资源中读取文本文件

rdx*_*dkr 1 text file kotlin

我需要读取一个文本文件,并且readLines()我已经找到了这个问题,但是答案中的代码总是使用javaClass;的一些变体。它似乎只能在类中工作,而我只使用一个简单的 Kotlin 文件,没有声明类。这样写在语法上是正确的,但它看起来真的很难看,而且它总是返回null,所以它一定是错误的:

val lines = object {}.javaClass.getResource("file.txt")?.toURI()?.toPath()?.readLines()
Run Code Online (Sandbox Code Playgroud)

当然我可以像这样指定原始路径,但我想知道是否有更好的方法:

val lines = File("src/main/resources/file.txt").readLines()
Run Code Online (Sandbox Code Playgroud)

rdx*_*dkr 10

感谢这个答案提供了读取文件的正确方法。目前,在不使用javaClass或类似结构的情况下从资源读取文件似乎是不可能的。

// use this if you're inside a class
val lines = this::class.java.getResourceAsStream("file.txt")?.bufferedReader()?.readLines()

// use this otherwise
val lines = object {}.javaClass.getResourceAsStream("file.txt")?.bufferedReader()?.readLines()

Run Code Online (Sandbox Code Playgroud)

根据我发现的其他类似问题,第二种方法也可能在 lambda 中工作,但我还没有测试过。请注意从此时开始需要的?.运算符和语法,因为如果未找到具有给定名称的资源,则返回。lines?.let {}getResourceAsStream()null

  • 在我执行 `/file.txt` 后,这对我有用,即 `vallines = object {}.javaClass.getResourceAsStream("/file.txt")?.bufferedReader()?.readLines()` 否则它返回 null (2认同)