Col*_*747 2 java resources json intellij-idea gson
resource
构建 JAR 后,我正在尝试读取文件夹的内容。资源文件夹source
在 IDE 设置 (IntelliJ) 中标记为 a 。
我尝试了以下方法:
InputStream input = getClass().getResourceAsStream("../objectLocation.json");
JsonReader jsonReader = new JsonReader(new InputStreamReader(input));
Run Code Online (Sandbox Code Playgroud)
我也试过:
JsonReader jsonReader = new JsonReader(new FileReader("../resources/objectLocation.json"));
Run Code Online (Sandbox Code Playgroud)
这两种方法都会导致:
结果是:
java.io.FileNotFoundException: com/layers/resources/objectLocation.json (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
文件结构:
src
-com.layers -> myClasses
-resources -> JSON
Run Code Online (Sandbox Code Playgroud)
编辑:
InputStream input = getClass().getResourceAsStream("objectLocation.json");
JsonReader jsonReader = new JsonReader(new InputStreamReader(input));
Run Code Online (Sandbox Code Playgroud)
结果在:
java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
在通过 Java 加载资源时不了解绝对路径和相对路径之间的区别getResourceAsStream()
是导致NullPointerException
.
假设结构和内容如下:
My Project
|-src
|-main
|-java
| |-SomePackage
| |-SomeClass.java
|-resources
|-Root.txt
|-SomePackage
|-MyData.txt
|-SomePackage2
|-MySubData.txt
Run Code Online (Sandbox Code Playgroud)
.jar 中的内容将按以下方式重新组织:
|-Root.txt
|-SomePackage
|-SomeClass.java
|-MyData.txt
|-SomePackage2
|-MySubData.txt
Run Code Online (Sandbox Code Playgroud)
以下指示检索资源数据的方法和无效方法:
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
Run Code Online (Sandbox Code Playgroud)
getResourceAsStream()
相对于被调用类实例对应的包进行操作。
归档时间: |
|
查看次数: |
3242 次 |
最近记录: |