放了文件在 resources 目录下,只想拿到它的路径。
参考: java获取resource下的文件路径
详情如下:
String path = xxx.class.getClassLoader().getResource("targetFile.txt").getPath();
java获取文件目录
| ── pom.xml
| ── src
│ |── main
│ │ |── java
│ │ │ |── com
│ │ │ │ |── alipay
│ │ │ │ │ |── ResourceTest.java
│ │ │ │ │ |── Resource.java
│ │ |── resources
│ │ │ |── conf
│ │ │ │ |── sysConf.json
│ │ │ |── request.xml
| ── local.iml
public class ResourceTest {
public static void main(String[] args) {
// 1、通过Class的getResource方法
String a1 = ResourceTest.class.getResource("/com/alipay/Resource.class").getPath();
String a2 = ResourceTest.class.getResource("Resource.class").getPath();
String a3 = ResourceTest.class.getResource("/request.xml").getPath();
String a4 = ResourceTest.class.getResource("../../request.xml").getPath();
String a5 = ResourceTest.class.getResource("/conf/sysConf.json").getPath();
String a6 = ResourceTest.class.getResource("../../conf/sysConf.json").getPath();
// 2、通过本类的ClassLoader的getResource方法
String b1 = ResourceTest.class.getClassLoader().getResource("com/alipay/Resource.class").getPath();
String b2 = ResourceTest.class.getClassLoader().getResource("request.xml").getPath();
String b3 = ResourceTest.class.getClassLoader().getResource("conf/sysConf.json").getPath();
// 3、通过ClassLoader的getSystemResource方法
String c1 = ClassLoader.getSystemClassLoader().getResource("com/alipay/Resource.class").getPath();
String c2 = ClassLoader.getSystemClassLoader().getResource("request.xml").getPath();
String c3 = ClassLoader.getSystemClassLoader().getResource("conf/sysConf.json").getPath();
// 4、通过ClassLoader的getSystemResource方法
String d1 = ClassLoader.getSystemResource("com/alipay/Resource.class").getPath();
String d2 = ClassLoader.getSystemResource("request.xml").getPath();
String d3 = ClassLoader.getSystemResource("conf/sysConf.json").getPath();
// 5、通过Thread方式
String e1 = Thread.currentThread().getContextClassLoader().getResource("com/alipay/Resource.class").getPath();
String e2 = Thread.currentThread().getContextClassLoader().getResource("request.xml").getPath();
String e3 = Thread.currentThread().getContextClassLoader().getResource("conf/sysConf.json").getPath();
}
}
由于maven打包会把 src/main/java 和 src/main/resources 下的文件放到 target/classes 下,所以下面统一以根路径代表此目录,总结起来有以下几个规律:
Class.getResource()的资源获取如果以 / 开头,则从根路径开始搜索资源。
Class.getResource()的资源获取如果不以 / 开头,则从当前类所在的路径开始搜索资源。
ClassLoader.getResource()的资源获取不能以 / 开头,统一从根路径开始搜索资源。