在Java中从资源文件夹的子文件夹加载文件

3

我在我的IntelliJ Java 15 Gradle项目的资源文件夹的子文件夹中加载文件时遇到了问题...

项目结构如下:

src/main/
├── java/
│   ├── AllMyClasses.java ... ... ...
│   └── module-info.java
└── resources/
    ├── text.txt
    └── img/
        └── favicon.png

以下是我代码的相关片段:

URL file = ClassLoader.getSystemResource("img/favicon.png");
URL file1 = ClassLoader.getSystemResource("text.txt");
System.out.println(file);
System.out.println(file1);

输出结果:

null
file:/C:/Users/MyUser/IdeaProjects/MyProject/build/resources/main/text.txt

为什么Java只能识别位于资源文件夹中的文件,而不能识别子文件夹中的文件?如何使我的程序也能识别子文件夹中的文件?
谢谢所有可以帮忙的人 :)

这应该是可以工作的。你的代码没有问题。你确定没有拼写错误或类似的问题吗?或者你的jar包实际上并不包含你正在尝试加载的文件吗? - geanakuch
2个回答

1

我不确定为什么你的版本无法工作,但这是我使用的:

getClass().getResourceAsStream("/img/favicon.png");

注意:如果您的类不在默认包中(应该不在),则“/img”中的“/”是必需的。

太棒了,这个解决了我的问题。我忘记加'/'了。不过很奇怪,因为这个问题只在我添加module-info.java之后才出现... 在此之前,我真的没有遇到任何问题。感谢你的解决方案! - Samuel E.
哦,很好,我很高兴能帮助到你。 (附言:如果你认为这会对其他人有所帮助,你可以将其标记为答案) - NameThatDisplays

0

我相信如果您使用以下两种方法之一,将解决您的问题。

  1. InputStream in = FileInputStream(PathOfYourFile)
  2. Java.nio.file包中提供的Paths类中可用的API。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接