当我尝试读取NullpointerException
位置的文件时,我正在获取src/main/resources
。它发生在我以jar
格式运行时。但是当我编译代码并运行它时,它在Intellij
中正常运行。
注意:我使用sbt包来构建jar并运行它。
请帮忙。谢谢!
已经打包到JAR中的文件不再可以从文件系统访问。在查看从URL
返回的myClass.getResource("file.txt")
时可以看到这种情况,例如:
/home/sria/cde-spark-assembly-1.0.jar!/file.txt
请注意!
表示文件已打包到JAR中。
这意味着您始终必须使用以下模式访问资源文件:
对于src/main/resources/file.txt
中的文件:
myClass.getResourceAsStream("file.txt")
您可能不想这样做有两个原因:
作为替代方案,您可以从文件系统中的(可配置)路径加载文件,例如:
val inputStream = new BufferedInputStream(new FileInputStream(myPath))
(Qazxswpoi)
这样您就可以加载文件,例如相对于reference或JAR file path。
我希望这有帮助。
注意:execution directory和sbt package
都会将资源文件打包到JAR中。