从 Java 包加载属性文件
2022-08-31 09:09:34
我需要读取隐藏在 的包结构中的属性文件。com.al.common.email.templates
我已经尝试了一切,但我无法弄清楚。
最后,我的代码将在 servlet 容器中运行,但我不想依赖容器来做任何事情。我编写 JUnit 测试用例,它需要在两者中工作。
我需要读取隐藏在 的包结构中的属性文件。com.al.common.email.templates
我已经尝试了一切,但我无法弄清楚。
最后,我的代码将在 servlet 容器中运行,但我不想依赖容器来做任何事情。我编写 JUnit 测试用例,它需要在两者中工作。
从包中的类加载属性时,可以使用com.al.common.email.templates
Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("foo.properties");
prop.load(in);
in.close();
(添加所有必要的异常处理)。
如果您的类不在该包中,则需要以略微不同的方式获取 InputStream:
InputStream in =
getClass().getResourceAsStream("/com/al/common/email/templates/foo.properties");
/ 中的相对路径(不带前导“/”的路径)表示将相对于表示类所在的包的目录搜索资源。getResource()
getResourceAsStream()
使用 将在类路径上搜索(不存在的)文件。java.lang.String.class.getResource("foo.txt")
/java/lang/String/foo.txt
使用绝对路径(以'/'开头的路径)意味着将忽略当前包。
为了补充Joachim Sauer的答案,如果您需要在静态上下文中执行此操作,则可以执行以下操作:
static {
Properties prop = new Properties();
InputStream in = CurrentClassName.class.getResourceAsStream("foo.properties");
prop.load(in);
in.close()
}
(像以前一样,异常处理被省略了。