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

时间:2015-02-02 11:02:46

标签: java scala jar sbt 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文件的方式访问此文件的内容?

1 个答案:

答案 0 :(得分:3)

当你打包它时,csv文件将驻留在jar存档中;对?然后,您无法直接将其作为文件访问。相反,你需要要求一个流:

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

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

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