由 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。
我在 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。