ClassLoader.getResource 使用 File.getAbsolutePath 时返回 null
ClassLoader.getResource returning null while using File.getAbsolutePath
我有一个 config.ini 文件需要打开,它位于目录中很远的地方,所以我使用 File.getAbsolutePath() 来设置基本目录并连接路径的其余部分。
打印路径,我得到了可以粘贴到文件资源管理器中的正确路径,但是对象 returned 为空。
所以我开始像这样初始化我的 Properties 和 ClassLoader:
Properties prop = new Properties();
ClassLoader classLoader = Test.class.getClassLoader();
然后我创建路径。我尝试转义反斜杠 (1) 和正斜杠 (2),两者都 return null 但两个路径都在文件资源管理器中工作。
String absPath = new File("").getAbsolutePath();
absPath = absPath.concat("\resources\config\config.ini"); // (1)
absPath = absPath.concat("/resources/config/config.ini"); // (2)
然后我尝试设置 URL 以打开 InputStream
URL res = Objects.requireNonNull(classLoader.getResource(absPath), "Unable to open config.ini");
InputStream is = new FileInputStream(res.getFile());
但是,下面的return是空的。
classLoader.getResource(absPath)
我希望这能正确打开文件,因为路径是正确的。我正在使用 Intelij,我读到我需要在设置 > 编译器下添加 .ini 资源文件,我这样做了,但这并没有解决我的问题。
谢谢!
这不是通过 class-loaders 加载资源的方式。
如果您的类路径如下所示...
java -cp resources;lib/my.jar ... org.mypack.MyClass
然后你用这个路径加载它
getClassLoader().getResource("/config/config.ini");
您的类路径包括 resources
文件夹,class-loader 从那里加载。
OS 的绝对路径肯定不在类路径中。
无论如何,您必须确定 resource
文件夹在类路径中。
如果您的配置文件不在类路径中,则您无法使用类加载器加载该文件。
还有一件事,如果你的配置不在类路径中,而是在工作目录的子目录中,为什么你不能简单地使用 new FileInputStream("resources/config/config.ini");
我有一个 config.ini 文件需要打开,它位于目录中很远的地方,所以我使用 File.getAbsolutePath() 来设置基本目录并连接路径的其余部分。
打印路径,我得到了可以粘贴到文件资源管理器中的正确路径,但是对象 returned 为空。
所以我开始像这样初始化我的 Properties 和 ClassLoader:
Properties prop = new Properties();
ClassLoader classLoader = Test.class.getClassLoader();
然后我创建路径。我尝试转义反斜杠 (1) 和正斜杠 (2),两者都 return null 但两个路径都在文件资源管理器中工作。
String absPath = new File("").getAbsolutePath();
absPath = absPath.concat("\resources\config\config.ini"); // (1)
absPath = absPath.concat("/resources/config/config.ini"); // (2)
然后我尝试设置 URL 以打开 InputStream
URL res = Objects.requireNonNull(classLoader.getResource(absPath), "Unable to open config.ini");
InputStream is = new FileInputStream(res.getFile());
但是,下面的return是空的。
classLoader.getResource(absPath)
我希望这能正确打开文件,因为路径是正确的。我正在使用 Intelij,我读到我需要在设置 > 编译器下添加 .ini 资源文件,我这样做了,但这并没有解决我的问题。
谢谢!
这不是通过 class-loaders 加载资源的方式。
如果您的类路径如下所示...
java -cp resources;lib/my.jar ... org.mypack.MyClass
然后你用这个路径加载它
getClassLoader().getResource("/config/config.ini");
您的类路径包括 resources
文件夹,class-loader 从那里加载。
OS 的绝对路径肯定不在类路径中。
无论如何,您必须确定 resource
文件夹在类路径中。
如果您的配置文件不在类路径中,则您无法使用类加载器加载该文件。
还有一件事,如果你的配置不在类路径中,而是在工作目录的子目录中,为什么你不能简单地使用 new FileInputStream("resources/config/config.ini");