java获取resource下的文件路径

放了文件在 resources 目录下,只想拿到它的路径。

详情如下:

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

好了, 以上是本文所有内容,希望对大家有所帮助,也希望大家对码农之家多多支持,你们的支持是我创作的动力!祝大家生活愉快!  

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java可以通过以下代码获取项目resource路径: ``` String resourcePath = getClass().getClassLoader().getResource("").getPath(); ``` 其中,`getClass().getClassLoader().getResource("")`获取的是项目的根路径,`.getPath()`将其转换为字符串路径。如果需要获取某个具体资源的路径,可以在引号内填写资源的相对路径,例如: ``` String resourcePath = getClass().getClassLoader().getResource("config.properties").getPath(); ``` 这样就可以获取到项目中config.properties文件路径了。 ### 回答2: 在Java获取项目的resource路径,可以使用以下方法来实现: 1. 使用Class.getResource(String path)方法:这种方法是最常用的,可以根据相对路径获取resource的绝对路径。例如,假设我们的resource文件夹在src/main/resources下,并且有一个名为config.properties的文件,我们可以使用以下代码获取文件路径: ```java String path = MyClass.class.getResource("/config.properties").getPath(); ``` 这里的"/config.properties"是相对于class文件路径,如果需要获取class文件所在目录的路径,可以使用以下代码: ```java String path = MyClass.class.getResource("").getPath(); ``` 注意,获取到的路径是URL格式的,如果需要转换成文件路径可以使用URLDecoder.decode()方法。 2. 使用ClassLoader.getResource(String path)方法:这种方法与前一种方法类似,不过是使用ClassLoader来获取资源路径。例如: ```java String path = MyClass.class.getClassLoader().getResource("config.properties").getPath(); ``` 这种方法适用于在不同的类中获取resource路径。 需要注意的是,以上方法在打包成JAR文件后,无法获取到资源路径,因为在JAR包中资源文件与class文件处于不同的路径。在这种情况下,通常可以使用ClassLoader.getResourceAsStream(String path)方法直接读取资源文件的内容,而不需要获取路径。 希望以上回答能够对您有所帮助。 ### 回答3: 在Java获取项目的resource路径可以使用ClassLoader类的getResource()方法。该方法可以返回一个URL对象,指向指定资源的位置。 首先,可以通过以下代码获取到ClassLoader对象: ClassLoader loader = Thread.currentThread().getContextClassLoader(); 接下来,使用ClassLoader对象的getResource()方法获取资源的URL,需要传入资源的相对路径作为参数。相对路径是相对于项目的根路径来确定的。 例如,假设在项目的resource文件夹下有一个名为config.properties的文件,可以通过以下代码获取路径: URL url = loader.getResource("config.properties"); 如果要获取资源的绝对路径,可以通过调用URL对象的getPath()方法来获取: String filePath = url.getPath(); 在获取到资源的路径后,可以根据具体需求来进行相应的处理,例如读取文件内容、加载图片等。 需要注意的是,如果在通过getResource()方法获取资源时,资源的相对路径以"/"开头,表示它是相对于classpath根目录的绝对路径,而不是项目根目录。 总结起来,通过ClassLoader的getResource()方法可以方便地获取项目的resource路径,进而对资源进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值