【发布时间】:2020-05-19 01:23:54
【问题描述】:
我有一个 jar (foo.jar),它的根目录中有一个文件 - 1.txt。
我尝试运行以下命令 -
MyTestClass.class.getClassLoader().getResource("/1.txt");
jar (foo.jar) 是我在类路径中的全部。
我希望这会起作用,因为“/”应该将我引导到类路径/jar 的根目录(根据我在 stackoverflow 中阅读的其他答案)。这将返回 null。
但似乎前面的“/”对我来说没有按预期工作。
我想通了,它没有 / -
MyTestClass.class.getClassLoader().getResource("1.txt") --> jar:file:/tmp/myjar.jar!/1.txt
getResouce 中前导“/”的作用/目的是什么?
【问题讨论】:
-
class.getResource()(使用相对路径)和class.getClassLoader().getResource()(使用绝对路径)是有区别的 -
你不应该有一个前导斜线。 ClassLoader.getResource() 不希望有一个。但是 Class.getResource() 确实如此,因为没有它,它会在与类相同的包中查找资源。
-
您使用的是 Java 9 模块吗?它们改变了 Class::getResource 的委托方式。
-
感谢您的澄清!这确实是我错过的类和类加载器之间的区别!
标签: java