scala - 从资源文件夹读取文件时出现空指针异常
问题描述
NullpointerException
当我尝试读取位置中存在的文件时,我得到了src/main/resources
。当我以jar
格式运行时会发生这种情况。但是当我编译代码并运行它时,它在Intellij
.
注意:我正在使用 sbt 包来构建 jar 并运行它。
请帮忙。谢谢!
解决方案
已打包到 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")
您可能不想这样做的原因有两个:
- 将文件添加到资源目录会增加 JAR 文件的大小。
- 无法使用标准文件系统操作访问该文件。
作为替代方案,您可以从文件系统中的(可配置)路径加载文件,例如:
val inputStream = new BufferedInputStream(new FileInputStream(myPath))
(参考)
我希望这有帮助。
注意:sbt package
和都sbt assembly
将资源文件打包到 JAR 中。
推荐阅读
- python - 在 sklearn 管道中使用 spacy 作为分词器
- python-2.7 - 如何使用 python 从 REST API 请求 AWS 现货实例定价
- python - python- sys.argv CLI 参数的帮助程序列表
- filenotfoundexception - 自己导入 spring-boot-starter,开始打印错误日志 'Unable to read meta-data for class'
- python - 转换为日期的正确方法
- polymer - 在测试聚合物时无法读取未定义的属性“匹配”
- reactjs - 我们如何在 React 应用程序中配置适用于本地和生产环境的服务器 URL?
- sql - SQL Server - 过去 52 周到给定周的交易量的分配(总和)
- angular - 如何引用数组中的组件?
- java - 一个简单的问题,关于动态 Java,它可行吗?还是完全不可能?