首页 > 解决方案 > 从资源文件夹读取文件时出现空指针异常

问题描述

NullpointerException当我尝试读取位置中存在的文件时,我得到了src/main/resources。当我以jar格式运行时会发生这种情况。但是当我编译代码并运行它时,它在Intellij.

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

请帮忙。谢谢!

标签: scalaintellij-ideajarsbtintellij-14

解决方案


已打包到 JAR 中的文件不再可从文件系统访问。URL在查看from 的返回值时可以看到这一点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))

参考

这样您可以加载文件,例如相对于JAR 文件路径执行目录


我希望这有帮助。

注意:sbt package和都sbt assembly将资源文件打包到 JAR 中。


推荐阅读