如何以在 sbt-assembly 之后可以访问的方式打开我的资源目录中的文件?

How to open a file in my resources dir in a way that it's accessible after sbt-assembly?

我的 Scala 应用程序使用了 Tototoshi 的 ScalaCSV 库,因此我需要打开放在 /src/main/resources/data.csv 下的 CSV 文件。我是这样访问的:

val file = getClass.getResource("/data.csv").getFile
CSVReader.open(file)
...

当我在 IntellijIDEA 下 运行 我的应用程序时,此设置完美运行,但一旦我将其与 sbt-assemby 打包,它就停止工作,我得到了这个错误:

file:/home/.../target/scala-2.11/projectx-assembly-0.0.1.jar!/data.csv (No such file or directory)

我如何才能以从 IDE 和组装的 jar 文件中工作的方式访问此文件的内容?

打包后,csv 文件将驻留在 jar 存档中;正确的?那么你不能直接将它作为文件访问。相反,您需要请求流:

val stream = getClass.getResourceAsStream("/data.csv")

可能您需要将流包装在 InputStreamReader 中以便 CSVReader 接受它:

val reader = new InputStreamReader(stream)
CSVReader.open(reader)