Java 读取Jar中的资源文件

Java 读取Jar中的资源文件,java,intellij-idea,jar,kotlin,embedded-resource,Java,Intellij Idea,Jar,Kotlin,Embedded Resource,我正在使用IntelliJ Idea并试图从项目结构中的resources文件夹中读取json文件。我读取json文件并使用jackson返回内容 return mapper.readValue(File("src/main/resources/file.json"), Map::class.java) 一旦我构建了这个项目并制作了一个jar,它就会抛出一个错误,它无法找到这个文件。我看了一下这里,发现我应该使用ClassLoader从resources文件夹中读取文件。所以我现在这样做- m

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

return mapper.readValue(File("src/main/resources/file.json"), Map::class.java)
一旦我构建了这个项目并制作了一个jar,它就会抛出一个错误,它无法找到这个文件。我看了一下这里,发现我应该使用ClassLoader从resources文件夹中读取文件。所以我现在这样做-

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

现在我得到一个NullPointerException。我现在有点迷路了。非常感谢您的帮助。

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

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

您不能将jar中的文件作为普通文本文件读取,如:What is
mapper
?它是一个吗?@AndrewThompson-是的,它是一个对象映射器。不知何故它不起作用。在[Source:UNKNOWN;line:1,column:0]处引发一个错误,声明-由于输入结束,\n没有要映射的内容。我也尝试使用getResource而不是getResourceAsStream执行相同的操作,但也失败了getResource(“file.json”)。文件引发以下错误-ClassLoader.getSystemCla…Resource(\“file.json\”)不能为空资源的路径很可能是
/main/resources/file.json
,但只有您可以确定。在根目录下-文件位于src/main/resources/metadata.jsonOk下进行澄清-每当我在生成后在src/main/resource文件夹中有文件要读取时(使用Gradle)它是否总是根植于根?这不能以某种方式改变吗?