java - 访问jar中的资源文件夹

标签 java json intellij-idea resources gson

一旦构建了我的 JAR,我将尝试读取 resource 文件夹的内容。资源文件夹在 IDE 设置 (IntelliJ) 中标记为 source

我试过以下方法:

  InputStream input = getClass().getResourceAsStream("../objectLocation.json");
  JsonReader jsonReader = new JsonReader(new InputStreamReader(input));

我也试过:

  JsonReader jsonReader = new JsonReader(new FileReader("../resources/objectLocation.json"));

这两种方法都会导致:

结果是:

java.io.FileNotFoundException: com/layers/resources/objectLocation.json (No such file or directory)

文件结构:

src

-com.layers -> myClasses

-resources -> JSON

编辑:

  InputStream input = getClass().getResourceAsStream("objectLocation.json");
  JsonReader jsonReader = new JsonReader(new InputStreamReader(input));

结果:

java.lang.NullPointerException

最佳答案

在 Java 中通过 getResourceAsStream() 加载资源时,不理解绝对相对 路径之间的区别是导致错误的常见来源NullPointerException

假设结构和内容如下:

My Project
  |-src
    |-main
      |-java
      | |-SomePackage
      |   |-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"); // 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() 相对于调用的类实例对应的包进行操作。

关于java - 访问jar中的资源文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32094701/

相关文章:

javascript - 选择框上的 AngularJS orderBy 无法按预期工作。

c# - 如何反序列化属性类型不固定的 json - 可以是空字符串或对象,请提出建议。如何处理这种情况?

json - 使用jquery从API获取数据

java - 为什么 Intellij-IDEA 会忽略我的 tomcat/conf/server.xml 上下文标记?

java - 用于实现 Android 延迟加载的 cglib 替代方案

java - 为什么 Jersey servlet 映射不起作用(不附加保留)?

java - BigDecimal 除以阶乘时会崩溃

java - jackson:将 json 反序列化为 java 映射,忽略一些条目

java - 如何使用 La Clojure 插件在 Java 项目中创建 clojure 文件?

java - IntelliJ IDEA 中的 Velocity ResourceNotFoundException