从资源文件夹中读取文件时获取nullpointerexception

问题描述 投票:0回答:1

当我尝试读取NullpointerException位置的文件时,我正在获取src/main/resources。它发生在我以jar格式运行时。但是当我编译代码并运行它时,它在Intellij中正常运行。

注意:我使用sbt包来构建jar并运行它。

请帮忙。谢谢!

scala intellij-idea jar sbt intellij-14
1个回答
1
投票

已经打包到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")

您可能不想这样做有两个原因:

  1. 将文件添加到资源目录将增加JAR文件大小。
  2. 使用标准文件系统操作无法访问该文件。

作为替代方案,您可以从文件系统中的(可配置)路径加载文件,例如:

val inputStream = new BufferedInputStream(new FileInputStream(myPath))

(Qazxswpoi)

这样您就可以加载文件,例如相对于referenceJAR file path


我希望这有帮助。

注意:execution directorysbt package都会将资源文件打包到JAR中。

© www.soinside.com 2019 - 2024. All rights reserved.