您的位置:首页 > 编程语言 > Java开发

java:在分布式项目中读取项目根目录下的文件(jar包也可用)

2018-03-06 17:23 309 查看
String path = Class.class.getClass().getResource("/").getPath();
String configPath=path+fileName;
configPath = java.net.URLDecoder.decode(configPath,"utf-8");
File file = new File(configPath);

Class.class.getClass().getResource("/").getPath();是获得根目录的绝对路径
如下图



我们知道classes是编译后文件的存放地址,classes目录下就是根目录
我的启动项目为jl-titan-build,文件存放在该项目的resources目录下
代码所在项目为jl-titan-core,如果用main方法跑的话,结果和上图不同
得到的是"/D:/Eclipse/bjhy_ljyz/titan-parent/jl-titan-core/target/classes"
也就是说 从哪个项目启动的 得到的结果就是启动项目的根目录
补充-----------------------------------------------
把项目打包为war包,通过Class.class.getClass().getResource("/").getPath()方法 可以在tomcat中运行,但是如果是把项目打包为jar包运行则会报空指针错,原因是Class.class.getClass().getResource("/")为null,之所以这样是因为把项目打包为jar包后 classes文件在jar中 相当于在一个压缩包中 而不是在具体的文件夹中 所以是获取不到文件的绝对路径的
解决办法是使用Class.class.getClass().getResourceAsStream("/"+fileName);该方法以相对路径的方式获取calsses下的文件,传入的参数为文件名,返回的是文件流而不是表示绝对路径的字符串。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息