java读取资源文件的几种方法与应用

[b][size=medium]资源文件的读取:[/size][/b]
项目目录为以下结构,其中src,resources目录都作为source目录。
project
|--src
|--jp
|--pset
|--Main.java
|--configs
|--test1.properties
|--resources
|--configs
|--test2.properties

方法1:

java.lang.Class.getResourceAsStream(String name)

资源名的写法分为两种:
1)以“/”开始。改种写法以[b]class-path为根目录[/b]匹配资源。
2)不以“/”开始。该种写法以[b]类所在目录为根目录[/b]匹配资源。

假设我们要在Main.java中编写代码读取test1.properties与test2.properties文件,应该这样写


this.getClass().getResourceAsStream("configs/test1.properties");
// [.]表示当前目录的意思
this.getClass().getResourceAsStream("./configs/test1.properties");
this.getClass().getResourceAsStream("/jp/pset/configs/test1.properties");

this.getClass().getResourceAsStream("../../configs/test2.properties");
this.getClass().getResourceAsStream("/configs/test2.properties");


方法2:

java.lang.ClassLoader.getResourceAsStream(String name)

资源名不能以“/”,否则会报错,它强制以class-path为根目录。

假设我们要在Main.java中编写代码读取test1.properties与test2.properties文件,应该这样写

this.getClass().getClassLoader().getResourceAsStream("jp/pset/configs/test1.properties");
this.getClass().getClassLoader().getResourceAsStream("configs/test2.properties");


[b][size=medium]资源文件的应用:[/size][/b]

资源文件一般用于系统参数的设置,为了便于修改,一般不会编译进jar文件。

前些时候写了一个MQ的监听服务。我把代码都编译成jar包,把系统配置文件server.properties和log4j.properties文件放在jar包同一个目录。

如下:

root
|--xxx.jar
|--lib /* 该目录放置xxx.jar运行的依赖包 */
|--server.properties
|--log4j.properties

通过java -jar xxx.jar命令运行jar包后发现log4j不能正确启动。

有可能会报告类似以下的错误:

log4j:WARN No appenders could be found for logger (jp.pset.gcm.GCMService).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.


其实这个错误是没有读取到log4j.properties文件的原因。log4j是从class-path中读取配置文件的,所以判定该错误为:log4j.properties文件没有加入class-path。

修改MANIFEST.MF文件

Class-Path: . lib/geronimo-jms_1.1_spec-1.0.jar lib/gcm-server.jar lib/json_simple-1.1.jar lib/log4j-1.2.17.jar lib/qpid-client-0.16.jar lib/qpid-common-0.16.jar lib/slf4j-api-1.7.5.jar lib/slf4j-log4j12-1.7.5.jar

第一个[.]很重要,它表示把当前目录也设为class-path。这样log4j就能读取到配置文件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值