gpt4 book ai didi

java - 使用 File.getAbsolutePath 时 ClassLoader.getResource 返回 null

转载 作者:行者123 更新时间:2023-12-02 05:01:45 24 4
gpt4 key购买 nike

我需要打开一个位于目录深处的 config.ini 文件,因此我使用 File.getAbsolutePath() 来设置基本目录并连接路径的其余部分。

打印路径,我得到了可以粘贴到文件资源管理器中的正确路径,但返回的对象为空。

所以我首先初始化我的属性和类加载器:

Properties prop = new Properties();
ClassLoader classLoader = Test.class.getClassLoader();

然后我创建路径。我尝试转义反斜杠(1)和正斜杠(2),两者都返回 null,但两个路径都在文件资源管理器中工作。

String absPath = new File("").getAbsolutePath();
absPath = absPath.concat("\\resources\\config\\config.ini"); // (1)
absPath = absPath.concat("/resources/config/config.ini"); // (2)

然后我尝试设置 URL 以打开输入流

URL res = Objects.requireNonNull(classLoader.getResource(absPath), "Unable to open config.ini");
InputStream is = new FileInputStream(res.getFile());

但是,以下返回 null。

classLoader.getResource(absPath)

我希望这能正确打开文件,因为路径是正确的。我正在使用 Intelij,我读到我需要在设置 > 编译器下添加 .ini 资源文件,我这样做了,但这并没有解决我的问题。

谢谢!

最佳答案

这不是通过类加载器加载资源的方法。

如果您的类路径类似于以下内容...

java -cp resources;lib/my.jar ... org.mypack.MyClass

然后用这个路径加载它

getClassLoader().getResource("/config/config.ini");

您的类路径包括 resources 文件夹,类加载器从那里加载。

操作系统的绝对路径肯定不在类路径中。

无论如何,您必须确保resource文件夹位于类路径中。

如果您的配置文件不在类路径中,则无法使用类加载器加载该文件。

还有一件事,如果您的配置不在类路径中,而是在工作目录的子目录中,为什么不能简单地使用 new FileInputStream("resources/config/config.ini");

关于java - 使用 File.getAbsolutePath 时 ClassLoader.getResource 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56382404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com