在正常开发的情况下,我们经常会遇到:需要获取指定文件路径,虽然我知道项目在本机的路径,一旦打包发布了,再根据绝对路径获取指定文件,肯定是获取不到的。这时候就需要用java给我们提供的一些获取相对路径方法了。
@Test
public void url() throws IOException {
// 获取当前项目下路径:方式一
File file = new File("");
String filePath = file.getCanonicalPath();
// 输出:D:\MyCode\log\log4j2-java
System.out.println(filePath);
// 获取当前项目下路径:方式二
// 输出:D:\MyCode\log\log4j2-java
System.out.println(System.getProperty("user.dir"));
// 获取类加载的根路径
String path = this.getClass().getResource("/").getPath().substring(1);
// 输出:D:/MyCode/log/log4j2-java/target/classes/
System.out.println(path);
// 获取当前类的所在工程路径
String path1 = this.getClass().getResource("").getPath().substring(1);
// 输出:D:/MyCode/log/log4j2-java/target/classes/com/gzl/cn/
System.out.println(path1);
// 获取类加载指定文件或者文件夹路径
String path2 = this.getClass().getResource("/data/DataConvert.dll").getPath().substring(1);
System.out.println(path2);
//获取所有的类路径 包括jar包的路径
System.out.println(System.getProperty("java.class.path"));
}
这个是我的项目路径。
注意
:
resources不管是在maven项目还是springboot项目我们都会将它当做资源路径,实际上就是编译后的根路径,他跟java文件夹是同等级别的。
这个是项目编译后的类根路径,从这里可以看出,我这里用的是ide编译器,eclipse也是一样的,实际上在编译器当中,java和resources都是编译后的根路径。
将打包的jar反编译看一下结构:
从这里可以得出结论,其实在编译器当中java和resources文件夹,我们可以理解为虚拟文件夹,实际上打出来的包是不存在这两个文件夹的,他就是代表着项目的根路径。
可能创建普通java项目可能会没有这个资源路径,我们可以在ide当中设置的。通过以下方式就可以将指定文件夹设置为java编译后的根路径。
在这里需要注意一点:我们这个路径是获取编译后的路径,也就是项目打包发布到服务器也能正常获取的,假如你新添加了一个文件,然后想要通过以下方式获取路径,可能会获取不到,因为你需要编译一下,也就是
maven clean install
一下就可以了。
// 获取类加载指定文件或者文件夹路径
String path2 = this.getClass().getResource("/data/DataConvert.dll").getPath().substring(1);
System.out.println(path2);
版权声明:本文为weixin_43888891原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。