无法访问资源文件夹中的文件

时间:2020-03-06 09:20:11

标签: java gradle intellij-idea

我已经在Intellij中创建了一个目录结构如下的新模块:
新模块-> src->主-> java->配置->资源-> ConfigResources.java
新模块-> src-> main->资源-> config->资源-> config.properties

在构建intellij项目时,我看到资源文件已正确复制到“ out / production / resources”目录

现在,当我尝试通过以下代码访问此文件时,它返回null:
ConfigResources.class.getResourceAsStream("config.properties")

根据我从其他几篇文章中所读到的内容,以上代码尝试从资源文件夹中的同一路径加载文件,但对我而言不起作用。

我还尝试了什么:

  1. ClassLoader.class.getResource()
  2. 将属性文件复制到java目录本身,但是在build classes文件夹包含类并将属性文件复制到资源文件夹之后
  3. 我尝试提供资源文件夹中的相对路径,但是它也不起作用
  4. 手动将文件复制到classes文件夹,然后就可以了(显然!)

如何访问资源文件? (这是一个gradle项目,使用Java 11) 我需要在intellij中设置任何配置还是需要在build.gradle文件中包含某些内容?

2 个答案:

答案 0 :(得分:0)

List<Document> docs = new ArrayList<>();
JSONParser jsonParser = new JSONParser();
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream is = classloader.getResourceAsStream(collectionName+".json");

try (Reader reader = new InputStreamReader(is)) {
    // Read JSON file
    Object obj = jsonParser.parse(reader);
    JSONArray documentArray = (JSONArray) obj;
    // Iterate over documentArray
    documentArray.forEach(doc -> {
        Document document = Document.parse(doc.toString());
        docs.add(document);
    });
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} catch (ParseException e) {
    e.printStackTrace();
}
return docs;

我也面临着同样的问题,但是我这样解决了从资源中获取数据的问题

答案 1 :(得分:0)

我遇到了同样的问题。尝试在资源目录中添加一个额外的文件夹“foo”。听起来有点混乱,但确实有效。

new-module -> src -> main -> resources -> config -> resources -> foo -> config.properties

ConfigResources.class.getClassLoader().getResourceAsStream(foo/config.properties);

相关问题