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 ...
随机推荐
- Vulkan Tutorial 29 Loading models
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 应用程序现在已经可以渲染纹理3D模型,但是 vertice ...
- jQuery点击缩略图切换大图代码
很多网站上都会有点击缩略图切换成大图的效果,下面来分享一下它的源码 还是先来看效果截图 运行文件 然后点击下一张 下面分享源代码 html文件 <!DOCTYPE html PUBLIC &qu ...
- tcp入门(唐唐的故事)
1,互联网的实现,分成好几层.每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持.把互联网分成五层,容易让人理解. 2,对这五层的理解(唐唐讲故事): 实体层:目的就是把计算机连接起来,用电气 ...
- ArrayList和LinkedList源码
1 ArrayList 1.1 父类 java.lang.Object 继承者 java.util.AbstractCollection<E> 继承者 java.util.Abstract ...
- bzoj2038: [2009国家集训队]小Z的袜子(hose) [莫队]
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- FFmpeg任意文件读取漏洞分析
这次的漏洞实际上与之前曝出的一个 CVE 非常之类似,可以说是旧瓶装新酒,老树开新花. 之前漏洞的一篇分析文章: SSRF 和本地文件泄露(CVE-2016-1897/8)http://static. ...
- C++ 之 Asio 库
1 简介 Asio 是一个跨平台的 C++ 库,常用于网络编程.底层的 I/O 编程等 (low-level I/O),其结构框架如下: 2 使用 Asio 2.1 下载 Asio 可分为 ...
- Python操作Zip文件
Python操作Zip文件 需要使用到zipfile模块 读取Zip文件 随便一个zip文件,我这里用了bb.zip,就是一个文件夹bb,里面有个文件aa.txt. import zipfile # ...
- Java基础之集合框架类及泛型简介
Collection接口 Collection 通用的常见方法 add()添加一个元素,可以指定脚标 addAll()将一个collection放入 clear()清除 remove()删除元素,返回 ...
- 消息队列中间件 RocketMQ 源码分析 —— Message 存储