java加载属性文件,从Java包加载属性文件

问题

我需要读取埋藏在我的包结构中的属性文件com.al.common.email.templates。

我已经尝试了一切,我无法理解。

最后,我的代码将在servlet容器中运行,但我不想依赖于容器。我编写了JUnit测试用例,它需要兼顾两者。

#1 热门回答(220 赞)

从包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");

ingetResource() / getResourceAsStream()中的相对路径(没有前导'/'的路径)表示将相对于表示该类所在的包的目录搜索资源。

使用java.lang.String.class.getResource("foo.txt")将在类路径中搜索(不存在)file/java/lang/String/foo.txt。

使用绝对路径(以'/'开头的路径)意味着忽略当前包。

#2 热门回答(44 赞)

要添加Joachim Sauer的答案,如果你需要在静态环境中执行此操作,你可以执行以下操作:

static {

Properties prop = new Properties();

InputStream in = CurrentClassName.class.getResourceAsStream("foo.properties");

prop.load(in);

in.close()

}

(与以前一样,例外处理被省略了。)

#3 热门回答(13 赞)

以下两种情况涉及从名为TestLoadProperties的示例类加载属性文件。

案例1:使用ClassLoader

InputStream inputStream = TestLoadProperties.class.getClassLoader()

.getResourceAsStream("A.config");

properties.load(inputStream);

加载属性文件

在这种情况下,属性文件必须位于root/src目录中才能成功加载。

情况2:不使用ClassLoader

InputStream inputStream = getClass().getResourceAsStream("A.config");

properties.load(inputStream);

加载属性文件

在这种情况下,属性文件必须与6TestLoadProperties.class文件位于同一目录中才能成功加载。

注意:TestLoadProperties.java和TestLoadProperties.class是两个不同的文件。前者.java文件通常位于项目的src/目录中,而后者.class文件通常位于其bin/目录中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值