Class#getResourceAsStream(String)
的JavaDoc读取:
查找具有给定名称的资源。搜索资源的规则 与给定类相关联的是由定义类实现的 班级装载机。此方法委托给此对象的类 加载器。
那么以下工作如何:
class AppTest {
private static final Properties p = new Properties();
static {
try {
p.load(AppTest.class.getResourceAsStream(("config.properties")));
} catch (IOException e) {
e.printStackTrace();
}
}
...
}
如果config.properties与AppTest.class位于同一目录中:
pro/wulfgar/net/on/users/app/{AppTest.class,config.properties}
AppTest.class的类加载器不应该在应用程序类路径(在这种情况下为.
)中查找它吗?因此,config.properties应与 pro 目录处于同一级别。
即使我将资源定义为pro/wulfgar/net/on/users/app/config.properties
,我无法理解为什么类加载器可以找到资源?
答案 0 :(得分:1)
查看InputStream is = App.class.getResourceAsStream("test.properties");
Class.getResourceAsStream和ClassLoader.getResourceAsStream之间存在差异
答案 1 :(得分:1)
JavaDoc上的措辞可能会使您感到困惑。 Class.getResourceAsStream(String)将解析类引用包中的资源(pro / wulfgar / net / on / users / app / config.properties)。如果您不希望以这种方式解析它,则在资源名称的开头添加“/”以表示它位于基本级别(如果您遵循标准包约定,则为pro / wulfgar / config.properties )。
JavaDoc的后半部分概述了此行为。 JavaDoc的引用部分解释了它委托给该类的ClassLoader。由于每个ClassLoader都有一个单独的文件源(jar或文件系统),因此它区分了特定的ClassLoader的资源集。
答案 2 :(得分:0)
由于包名称,ClassLoader
已经知道AppTest.class
所在的目录。它没有属性文件的此类信息。