scala - 由 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)
解决方案
为了从资源文件夹中获取文件,请使用以下代码:
val reader =CSVReader.open(scala.io.Source.fromInputStream(getClass.getResourceAsStream("/sample.csv")))
println(reader.all())
我使用了这个CSVReader 库。
推荐阅读
- android - 将对象的嵌套数组列表从适配器传递到活动
- java - springboot打包为JAR时,ServletContextEvent.getServletContext返回null
- java - 单位圆程序舍入
- flask - 如何使用 Flask 在调试模式下运行应用程序
- javascript - 在 Javascript 中从父类调用 Childs 函数
- php - Codeigniter 不上传 png 格式的图像文件
- npm - 纱线重定向跟踪版本控制中的某些 npm 包
- google-sheets - 表格公式 - ArrayFormula 和 CountIf
- laravel - Encrypter.php 第 73 行中的 FatalThrowableError:调用未定义函数 openssl_encrypt()
- angular5 - @output 不能以角度工作