java访问项目_Java项目访问resources文件

最近在对接支付宝支付的开发,需要取到支付的RSA公钥和私钥。于是把公钥和私钥加到resources文件夹里。但是不知道怎么读到这两个文件,也就是不知道路径怎么写。于是网上搜索了下如何获取工作路径,System.getProperty("user.dir"); 用单元测试跑了下,可以拿到Module路径。

64d4303c8d85e4422531f2092ca03f46.png

得到D:\WorkSpace\daikuan\aic\aic-common

aic是project aic-common 是module路径。然后部署到Tomcat下获取到的就是D:\Java\apache-tomcat-8.5.8\bin 了,竟然是Tomcat路径。

ff025132a487efeab55b01ad52c96395.png

所以使用System.getProperty("user.dir");取项目文件这一招不好使,咨询其他同事得知可以通过ClassLodaer路径获取项目下得文件。getClassLoader代码如下

public static ClassLoader getClassLoader() {

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

if (classLoader == null) {

classLoader = PropertiesUtil.class.getClassLoader();

}

return classLoader;

}

getResources返回来的是一个URL 对象集合,不尽友好,但还是可以用,项目结构如下

07dacd2345f3280b2fcbb3b78b5e9977.png

ClassLoader 并未提供class的路径,但是提供了getResources用以搜索class下的文件,获取密钥的代码如下

Enumeration keyPath= PropertiesUtil.getClassLoader().getResources("resources\\tianping\\private-rsa.pfx");

URL url=null;

String path=null;

while(keyPath.hasMoreElements()){

url=keyPath.nextElement();

System.out.println(url.getPath());

String path=url.getPath();

}

返回来的 keyPath 是空的,同事取configuration.properties是没问题,那么问题应该出在我写的路径上。比这时候我去生成的war包里查看了下configuration.properties和tianping文件夹的相对关系,如图所示

08162da4d7cefb19157ce45f4f4c00de.png

configuration.properties就在classes 路径下,而我放在resources的路径的天平文件夹也在classes路径下,大概是Maven打包的原因吧。于是我就直接将"resources\tianping\private-rsa.pfx" 改成了"tianping\private-rsa.pfx"

改完之后打印出来的是这样一个路径 /D:/WorkSpace/daikuan/chexian-axb-service/target/classes/tianping%5cprivate-rsa.pfx。%5 给人感觉是转过编码似的,所以我做了个 URLDecoder.decode 解码得到/D:/WorkSpace/daikuan/chexian-axb-service/target/classes/tianping\private-rsa.pfx竟然出现了这样的路径 即含有/ 还含有\。

然后用FileInputStream ksfis = new FileInputStream(path);试了一下是可以访问的。baidu了下没有找到关于路径中同时有/ \的资料,有点摸不着头脑了。我感觉出现\ 可能会和"tianping\private-rsa.pfx" 有关系,所以我就改成了 "tianping/private-rsa.pfx"返回的路径就正常多了 /D:/WorkSpace/daikuan/chexian-axb-service/target/classes/tianping/private-rsa.pfx 使用FileInputStream也是可以访问的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值