首页 > 解决方案 > 由 sbt 程序集打包的 Scala Jar 不读取文件的相对路径,但在 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))

文件存在于 src/main/resources/

但这在使用组装时不起作用

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)

标签: scalasbtsbt-assembly

解决方案


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

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

我使用了这个CSVReader 库


推荐阅读