【Java】getClass().getClassLoader().getResourceAsStream() 与 getClass().getResourceAsStream()的区别

本文探讨了在Java中,使用`getClass().getClassLoader().getResourceAsStream()`与`getClass().getResourceAsStream()`加载资源文件时的区别。主要讲解了两者在加载路径起点的不同,前者从类路径根目录开始,后者则从当前包下开始寻找资源文件。通过实例和编译后的目录结构,清晰地展示了这两种方法在实际应用中的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码

public static void main(String[] args) {
	Properties properties = new Properties();
	
	System.out.println(getClass().getResource("").getPath());
	System.out.println(this.getClass().getResource("").getPath());
	System.out.println(this.getClass().getClassLoader().getResource("").getPath());
}

输出

/home/codedancing/Project/IDEA_WorkSpace/Test/target/classes/com/codedancing/maven/dao/
/home/codedancing/Project/IDEA_WorkSpace/Test/target/classes/com/codedancing/maven/dao/
/home/codedancing/Project/IDEA_WorkSpace/Test/target/classes/

结论

从当前包下加载指定名称的文件
getClass().getResourceAsStream("config.properties");
this.getClass().getResourceAsStream("config.properties");

从 classpath 根目录下加载指定名称的文件
this.getClass().getClassLoader().getResourceAsStream("config.properties");


实例
编译后的目录结构:
在这里插入图片描述

package com.codedancing.maven.dao;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Dao {

	private String db;
    private String info;

    public void getProperties() {
        Properties properties = new Properties();

        try (
            InputStream in1 = this.getClass().getClassLoader().getResourceAsStream("db.properties");
            InputStream in2 = this.getClass().getResourceAsStream("info.properties")
        ) {
            properties.load(in1);
            db = properties.getProperty("db");
            System.out.println("db.properties内容获取成功:db=" + db);

            properties.load(in2);
            info = properties.getProperty("info");
            System.out.println("info.properties内容获取成功:info=" + info);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
package com.codedancing.maven.dao;

public class DaoTest {

    public static void main(String[] args) {
        Dao dao = new Dao();
        dao.getProperties();
    }

}


============== 输出 ===============

db.properties内容获取成功:db=mysql5.6
Exception in thread "main" java.lang.NullPointerException
	at java.util.Properties$LineReader.readLine(Properties.java:434)
	at java.util.Properties.load0(Properties.java:353)
	at java.util.Properties.load(Properties.java:341)
	at com.codedancing.maven.dao.Dao.getProperties(Dao.java:23)
	at com.codedancing.maven.dao.DaoTest.main(DaoTest.java:7)

》》》info.properties文件并未找到,抛出空指针异常《《《
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值