【问题标题】:InputStream is null when trying to read a resource file [duplicate]尝试读取资源文件时 InputStream 为空 [重复]
【发布时间】:2019-07-19 07:21:03
【问题描述】:

我在/src/main/resources 中有一个 JSON 文件,我正在尝试通过以下方式读取该文件:

private List<String> readContextFromFile(String file) {

        List<String> context = new ArrayList<>();
        try {
            InputStream in = getClass().getClassLoader().getResourceAsStream(file);
            Map<String, ArrayList> input = objectMapper.readValue(in, HashMap.class);

            context = input.get("@context");
        } catch (IOException e) {
            LOGGER.error("Error reading value {}", e.getMessage());
        }
        return context;
    }

但是,InputStream 为空。

这是我传递的文件路径:/resources/context.json

我做错了什么?

【问题讨论】:

  • 该文件是否与班级所在的同一文件夹中?
  • vc73,是的。
  • src 目录在运行时不存在。查看资源在 JAR 或 WAR 文件中的实际位置,并使用该路径。

标签: java maven


【解决方案1】:

1) /src/main/resources 代表源代码,而不是运行时代码。
编译的类和处理的资源在target/classes 文件夹中结束,而不是在src 文件夹中。

2) 关于:

这是我传递的文件路径:/resources/context.json

为什么要传递resources 令牌?它是一个 Maven/Gradle 目录,您不会在运行时检索它。只有其中包含的内容在运行时才可用。
你要传递的是/context.json

【讨论】:

  • 当我通过 /context.json 时,InputStream 再次为空。
  • 重新编译您的代码 (mvn compile) 并检查 target/classes 是否包含 context.json 文件。重试。
  • @davidxxx 这行得通。谢谢!
猜你喜欢
  • 2019-08-19
  • 1970-01-01
  • 2012-08-07
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 2014-09-15
  • 1970-01-01
相关资源
最近更新 更多