java获取resource下的文件路径

放了文件在 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()的资源获取不能以 / 开头,统一从根路径开始搜索资源。

posted @ 2022-10-26 14:20  aaacarrot  阅读(3619)  评论(0编辑  收藏  举报