从子目录获取资源(Java 中)

问题描述 投票:0回答:1

我要问一个似乎与许多现有问题重复的问题,但我找到的答案似乎都不能为我解决问题。

考虑以下课程:

package resources;

public class Main {
    public static void main(String[] args) {
        System.out.println(ClassLoader.getSystemResource("toplevel.txt"));
        System.out.println(ClassLoader.getSystemResource("/sub/nested.txt"));
    }
}

以及仅包含三个文件的目标目录结构:

resources/Main.class
sub/nested.txt
toplevel.txt

输出为:

file:/C:/Eclipse/workspace-2023-03/resources/bin/toplevel.txt
null

显然路径

/C:/Eclipse/workspace-2023-03/resources/bin/
是我的目标目录的路径。为什么找不到资源
/sub/nested.txt

我在 Eclipse 中使用 JDK 17。该行为与项目是否模块化无关。 这个问题(以及其他问题)的答案表明上述内容应该有效,但事实并非如此。我忽略了什么?

java file
1个回答
0
投票

问题是你的前缀斜杠:

System.out.println(ClassLoader.getSystemResource("/sub/nested.txt"));
                                                 ⬆︎

这告诉类加载器查找相对于文件系统根目录的资源,而不是相对于它认为的“基本”目录(即,您的系统资源目录,在文件系统或 jar 中)。

删除它,它应该可以工作:

System.out.println(ClassLoader.getSystemResource("sub/nested.txt"));
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.