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

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

所以使用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 对象集合,不尽友好,但还是可以用,项目结构如下

- ClassLoader 并未提供class的路径,但是提供了getResources用以搜索class下的文件,获取密钥的代码如下
Enumeration<URL> 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文件夹的相对关系,如图所示

- 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也是可以访问的。
Java项目访问resources文件的更多相关文章
- spring boot项目中无法访问resources文件夹问题
如图,浏览器默认访问static文件下的内容,无法访问templates文件下的html文件. 解决方法: 在application.properties文件中添加静态资源目录的配置即可.
- jenkins部署java项目,脚本文件放在远程仓库中 和jar一起打包(六)
jenkins部署java项目到远程linux上,脚本文件和项目一起上传到gogs上,直接执行gogs上的脚本文件来执行项目 (1)新建maven项目 pom.xml的配置 <project x ...
- Java项目读取resources资源文件路径那点事
今天在Java程序中读取resources资源下的文件,由于对Java结构了解不透彻,遇到很多坑.正常在Java工程中读取某路径下的文件时,可以采用绝对路径和相对路径,绝对路径没什么好说的,相对路径, ...
- Java项目生成Jar文件
打开 Jar 文件向导 Jar 文件向导可用于将项目导出为可运行的 jar 包. 打开向导的步骤为: 在 Package Explorer 中选择你要导出的项目内容.如果你要导出项目中所有的类和资源, ...
- java项目引用证书文件(微信支付的p12文件)
1. 绝对路径: // windows: public static String PATH1 = "E:\\project27_app_wuyoujie\\apiclient_cert.p ...
- Eclipse 中 Java 项目中 .settings 文件夹作用
今天工作时,因对 .settings 文件夹误操作,耗时 6 个多小时,才了解到原因就出在 .settings 文件夹.经查阅资料,对 .settings 做如下整理: 就如setting这个名字,就 ...
- java项目中Excel文件的导入导出
package poi.excel; import java.io.IOException; import java.io.InputStream; import java.io.OutputStre ...
- Eclipse java项目将普通文件转化为Source文件的操作
前提:该项目中已经将原有的Source folder删除掉. 右键单击普通文件>Build path>Use as Source Folder.
- java项目中Excel文件预览
package com.linkonworks.df.busi.utils; import java.io.File; import java.io.FileInputStream; import j ...
随机推荐
- Java版 QQ空间自动登录无需拷贝cookie一天抓取30WQQ说说数据&流程分析
QQ空间说说抓取难度比较大,花了一个星期才研究清楚! 代码请移步到GitHub GitHub地址:https://github.com/20100507/Qzone [没有加入多线程,希望你可以参与进 ...
- maven - 引用本地jar,进行jar包移动
背景: 项目为maven工程,部分jar需要需用项目单独修改的本地jar包. 配置好scope后发现构建后引用的jar没有移动到对应的目录,百度后发现需要配置以下依赖 <plugin> & ...
- (转)示例化讲解RIP路由更新机制
目录(?)[+] 以下内容摘自最新上市的“四大金刚”图书之一<Cisco路由器配置与管理完全手册>(第二版)(其它三本分别为<Cisco交换机配置与管理完全手册>(第二 ...
- 【Django】django 的request和response(转)
当请求一个页面时,Django 把请求的 metadata 数据包装成一个 HttpRequest 对象,然后 Django 加载合适的 view 方法,把这个 HttpRequest 对象作为第一个 ...
- 【PHP】打印输出var_dump+echo+print_r
var_dump 判断一个变量的类型与长度如:<?$a = 1;$b = 't';echo var_dump($ta,$tb); // 结果为 int(123) string(3) " ...
- 【MYSQL】ubuntu13安装mysql(转)
安装的是mysql-5.0.87-linux-i686-glibc23.tar.gz 1.解压tar.gz tar –xzf mysql-5.0.87-linux-i686-glibc23.tar.g ...
- 移动端https抓包那些事--初级篇
对于刚刚进入移动安全领域的安全研究人员或者安全爱好者,在对手机APP进行渗透测试的时候会发现一个很大的问题,就是无法抓取https的流量数据包,导致渗透测试无法继续进行下去. 这次给大家介绍一些手机端 ...
- word2vec原理(一) CBOW与Skip-Gram模型基础
word2vec原理(一) CBOW与Skip-Gram模型基础 word2vec原理(二) 基于Hierarchical Softmax的模型 word2vec原理(三) 基于Negative Sa ...
- Git时光机穿梭之撤销修改
自然,你是不会犯错的.你在readme.txt中添加了一行: $ cat readme.txt Git is a distributed version control system. Git is ...
- html5 textarea 文本框根据输入内容自适应高度
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...