文章参考: https://blog.youkuaiyun.com/honghailiang888/article/details/51878866
ClassPathTest 是自定义的类
第一种
URL r = ClassPathTest.class.getResource("");
System.out.println(r.getPath());
参数: 空字符串
值: /D:/git/my-mvc/target/classes/com/learn/test/
描述: 当前类的位置,有包名,不包括该类
第二种
URL r = ClassPathTest.class.getResource("/");
System.out.println(r.getPath());
参数: /
值: /D:/git/my-mvc/target/classes/
描述: 项目的根路径
第三种
URL r = ClassPathTest.class.getResource("/application.properties");// 开头有斜杠
URL r = ClassLoader.getSystemClassLoader().getResource("application.properties");//开头没有斜杠
System.out.println(r.getPath());
参数: application.properties (配置文件)
值: /D:/git/my-mvc/target/classes/application.properties
描述: 配置文件的路径, 文件不存在则r对象为null
获得 类加载器的写法:
ClassPathTest.class.getClassLoader();
Thread.currentThread().getContextClassLoader();
ClassLoader.getSystemClassLoader();
额外的随笔:
File可解析以下两种类型
/D:/git/my-mvc/target/classes/application.properties (URL)
file:/D:/git/my-mvc/target/classes/application.properties (URI)
File f = new File(r.toURI());
f.getPath(); //同入参, 与URL RUI不同 D:\git\my-mvc\target\classes\application.properties (没有斜杠开头, 或file协议开头 )
f.getAbsolutePath(); // 入参为空字符串时, 返回的是 项目的根路径 D:\git\my-mvc
File 也支持 ../ 这种形式的路径
getCanonicalPath();// 返回的是规范的绝对路径 没有../这种
可参考:
File 类的 getPath()、getAbsolutePath()、getCanonicalPath() 的区别
https://blog.youkuaiyun.com/zsensei/article/details/79365348
获取 项目的 classpath路径
System.getProperty("java.class.path");
D:\git\my-mvc\target\classes;D:\repository\javax\servlet\javax.servlet-api\3.0.1\javax.servlet-api-3.0.1.jar;C:\Users\dev\Desktop\eclipse\configuration\org.eclipse.osgi\419\0\.cp\lib\javaagent-shaded.jar
java项目中Classpath路径到底指的是哪里?
https://blog.youkuaiyun.com/javaloveiphone/article/details/51994268