我试图在Resources
目录中读取json文件,并使用以下内容:
jsonObject = this.readJson(this.getClass().getClassLoader().getResource("jsonFileName").getPath());
在IDE中它正确运行但是当我构建thw jar并尝试通过java -jar jarName
运行它时,我得到一个"找不到文件"错误,当我检查路径时,它看起来像这样:
...projectName/target/projectName-1.0-SNAPSHOT.jar!/kb/is/identity.json
在IDE上运行时,路径如下所示:
...projectName/target/classes/kb/is/identity.json
答案 0 :(得分:2)
getResource("jsonFileName")
- 在这种情况下,根目录是在Idea下使用它的项目名称,但是当你在jar
下运行它时 - 我认为根路径是User Home
。
如果我没记错,您可以在资源路径中使用/
进行修复。
例如。使用Maven
时,您有一个resource directory
。 identity.json
中有resource root
。使用 getClass().getResourceAsStream("/identity.json")
会收到此文件(在Idea
和jar
中),因为当您构建jar
时,所有资源都会复制到根目录jar
文件。
答案 1 :(得分:2)
使用getResourceAsStream非常重要,而不是getResource。 看看How getClassLoader().getResourceAsStream() works in java