在jar中访问资源文件夹 [英] Access resource folder within jar
问题描述
我试图在构建JAR之后阅读资源
文件夹的内容。资源文件夹在IDE设置(IntelliJ)中标记为 source
。
我尝试了以下方法:
InputStream input = getClass()。getResourceAsStream(../ objectLocation.json);
JsonReader jsonReader = new JsonReader(new InputStreamReader(input));
我也试过:
<$ p $ jsonReader jsonReader = new JsonReader(new FileReader(../ resources / objectLocation.json));
这两种方法都会导致:
导致:
$ p $ java.io.FileNotFoundException:com / layers / resources / objectLocation.json(没有这样的文件或目录)
文件结构:
src
-com.layers - > myClasses
-resources - > JSON
编辑:
InputStream input = getClass()。getResourceAsStream(objectLocation.json);
JsonReader jsonReader = new JsonReader(new InputStreamReader(input));
结果为:
java.lang.NullPointerException
通过 getResourceAsStream()
加载Java中的资源时,不理解绝对和相对路径错误导致 NullPointerException
。
假设以下结构和内容:
我的项目
| -src
| --main
| -java
| | - 一些包
| | -SomeClass.java
| -resources
| -Root.txt
| -SomePackage
| -MyData.txt
| -SomePackage2
| - MySubData.txt
内容将在.jar中进行重新组织:
| -Root.txt
| -SomePackage
| -SomeClass.java
| -MyData.txt
| -SomePackage2
| -MySubData.txt
什么不检索资源数据:
InputStream IS;
IS = SomeClass.class.getResourceAsStream(Root.txt); //不行
IS = SomeClass.class.getResourceAsStream(/ Root.txt); // OK
IS = SomeClass.class.getResourceAsStream(/ MyData.txt); //不好
IS = SomeClass.class.getResourceAsStream(MyData.txt); // OK
IS = SomeClass.class.getResourceAsStream(/ SomePackage / MyData.txt); // OK
IS = SomeClass.class.getResourceAsStream(SomePackage / MyData.txt); //不好
IS = SomeClass.class.getResourceAsStream(MySubData.txt); //不正确
IS = SomeClass.class.getResourceAsStream(SomePackage / SomePackage2 / MySubData.txt); // OK
IS = SomeClass.class.getResourceAsStream(/ SomePackage / SomePackage2 / MySubData.txt); //不行
IS = SomeClass.class.getResourceAsStream(/ SomePackage2 / MySubData.txt); //不好
IS = SomeClass.class.getResourceAsStream(SomePackage2 / MySubData.txt); // OK
getResourceAsStream()
到与被调用的Class实例对应的包。
I am trying to read the contents of a resource
folder once my JAR is built. The resource folder is marked as a source
in the IDE settings (IntelliJ).
I have tried the following methods:
InputStream input = getClass().getResourceAsStream("../objectLocation.json");
JsonReader jsonReader = new JsonReader(new InputStreamReader(input));
I have also tried:
JsonReader jsonReader = new JsonReader(new FileReader("../resources/objectLocation.json"));
Both of these methods results in :
Which results in:
java.io.FileNotFoundException: com/layers/resources/objectLocation.json (No such file or directory)
File structure:
src
-com.layers -> myClasses
-resources -> JSON
EDIT:
InputStream input = getClass().getResourceAsStream("objectLocation.json");
JsonReader jsonReader = new JsonReader(new InputStreamReader(input));
Results in a:
java.lang.NullPointerException
Not understanding the difference between absolute and relative paths when loading resources in Java via getResourceAsStream()
is a common source of errors leading to NullPointerException
.
Assuming the following structure and content:
My Project
|-src
|-main
|-java
| |-SomePackage
| |-SomeClass.java
|-resources
|-Root.txt
|-SomePackage
|-MyData.txt
|-SomePackage2
|-MySubData.txt
Content will be re-organized as following in the .jar:
|-Root.txt
|-SomePackage
|-SomeClass.java
|-MyData.txt
|-SomePackage2
|-MySubData.txt
The following indicates what works and what does not work to retrieve resource data:
InputStream IS;
IS = SomeClass.class.getResourceAsStream("Root.txt"); // Not OK
IS = SomeClass.class.getResourceAsStream("/Root.txt"); // OK
IS = SomeClass.class.getResourceAsStream("/MyData.txt"); // Not OK
IS = SomeClass.class.getResourceAsStream("MyData.txt"); // OK
IS = SomeClass.class.getResourceAsStream("/SomePackage/MyData.txt"); // OK
IS = SomeClass.class.getResourceAsStream("SomePackage/MyData.txt"); // Not OK
IS = SomeClass.class.getResourceAsStream("MySubData.txt"); // Not OK
IS = SomeClass.class.getResourceAsStream("SomePackage/SomePackage2/MySubData.txt"); // OK
IS = SomeClass.class.getResourceAsStream("/SomePackage/SomePackage2/MySubData.txt"); // Not OK
IS = SomeClass.class.getResourceAsStream("/SomePackage2/MySubData.txt"); // Not OK
IS = SomeClass.class.getResourceAsStream("SomePackage2/MySubData.txt"); // OK
getResourceAsStream()
operates relative to the package corresponding to the called Class instance.
这篇关于在jar中访问资源文件夹的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!