【问题标题】:Reading a resource file in Jar读取 Jar 中的资源文件
【发布时间】:2018-11-24 04:45:15
【问题描述】:

我正在使用 IntelliJ Idea 并尝试从项目结构中的资源文件夹中读取 json 文件。我读取了json文件并使用jackson返回了内容。

return mapper.readValue(File("src/main/resources/file.json"), Map::class.java)

一旦我构建了项目并制作了一个 jar,它就会抛出一个错误,它无法找到该文件。我在这里看了一点,发现我应该使用 ClassLoader 从资源文件夹中读取文件。所以我现在就这样做 -

mapper.readValue(File( ClassLoader.getSystemClassLoader().getResource("src/main/resources/file.json").toURI()), Map::class.java)

现在我得到一个 NullPointerException。我现在有点失落。任何帮助都深表感谢。

【问题讨论】:

标签: java intellij-idea jar kotlin embedded-resource


【解决方案1】:

假设您的构建遵循默认约定,src/main/resource 下的任何内容都将在类路径的 root 上可用,因此您只需将代码更改为:

mapper.readValue(ClassLoader.getSystemClassLoader().getResourceAsStream("file.json"), Map::class.java)

【讨论】:

  • 不知何故不起作用。引发错误说明 - 由于 [Source: UNKNOWN; 处的输入结束\n 没有要映射的内容;行:1,列:0。我也尝试使用 getResource 而不是 getResourceAsStream,但也失败了
  • getResource("file.json").file 抛出以下错误 - ClassLoader.getSystemCla...Resource(\"file.json\") 不能为空
  • 资源的路径更可能是/main/resources/file.json,但只有你能确定。
  • 根目录下-文件在src/main/resources/metadata.json下
  • 澄清一下 - 每当我在构建后(使用 Gradle)在 src/main/resource 文件夹中读取文件时,它是否总是进入根目录?这不能以某种方式改变吗?
猜你喜欢
  • 2021-11-21
相关资源
最近更新 更多