由 sbt assembly 打包的 Scala Jar 不读取文件的相对路径但在 intelliJ 中同样有效

Scala Jar packaged by sbt assembly doesn't read relative path of file but same works in intelliJ

我在 scala sbt 中遇到了这个有趣的问题。非常感谢任何帮助。

我读档如下

 CSVReader.open(new File(getClass.getResource("/sampleData/sample.csv").getPath))
 CSVReader.open(new File("src/main/resources/sampleData/sample.csv"))

这在 intellij 中完美运行,但在 jar 中不起作用

在 Intellij 中,它不会读取以下文件

CSVReader.open(new File(getClass.getResource("/sampleData/sample.csv").getPath))

file is present inside src/main/resources/

但是当 assemble 使用

时这不起作用
sbt cleam assemble

然后尝试给予

java java -jar /Users/sample/target/scala-2.11/Sample-assembly-1.0.jar

然后我得到以下异常

Exception in thread "main" java.io.FileNotFoundException: file:/Users/sample/target/scala-2.11/Sample-assembly-1.0.jar!/sampleData/sample.csv (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)

要从资源文件夹中获取文件,请使用以下代码:

val reader =CSVReader.open(scala.io.Source.fromInputStream(getClass.getResourceAsStream("/sample.csv")))
println(reader.all())

我用过这个CSVReader library