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下的文件,传入的参数为文件名,返回的是文件流而不是表示绝对路径的字符串。