className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别

 className.class.getResourceAsStream :

一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件config.properties

那么,应该有如下代码:

//前面没有“/”代表当前类的目录

InputStream is1 = Test.class.getResourceAsStream("config.properties");
System.out.println(is1);// 不为null

 第二:在Test.class目录的子目录下,例如:com.x.y 下有类Test.class ,同时在 com.x.y.prop目录下有资源文件config.properties

那么,应该有如下代码:

//前面没有“/”代表当前类的目录

InputStream is2 = Test.class.getResourceAsStream("prop/config.properties");
System.out.println(is2);//不为null

 第三:不在同目录下,也不在子目录下,例如:com.x.y 下有类Test.class ,同时在 com.m.n 目录下有资源文件config.properties

那么,应该有如下代码:

//前面有“/”,代表了工程的根目录

InputStream is3 = Test.class.getResourceAsStream("/com/m/n/config.properties");

System.out.println(is3);//不为null

ClassLoader.getSystemResourceAsStream :

和className.class.getResourceAsStream 的第三种取得的路径一样,但少了“/”

 InputStream is4 = ClassLoader.getSystemResourceAsStream("properties/PayManagment_Config.properties");

System.out.println(is4);//不为null


/*-------------------------------------------------------------------------------------------------------*/


Properties p = new Properties();
BufferedInputStream is4 = new BufferedInputStream(FileDownLog.class.getResourceAsStream("/spring/file.properties"));
p.load(is4);
String url = p.getProperty("hibernate.connection.url");


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用ClassLoader.loadClass(className)动态加载类的简单例子: ``` public class Main { public static void main(String[] args) throws Exception { // 定义要加载的类的全限定名 String className = "com.example.MyClass"; // 创建自定义的ClassLoader实例 ClassLoader myClassLoader = new MyClassLoader(); // 使用ClassLoader动态加载类 Class<?> myClass = myClassLoader.loadClass(className); // 创建该类的实例 Object myObject = myClass.newInstance(); // 调用该类的方法 myClass.getMethod("myMethod").invoke(myObject); } } // 自定义ClassLoader class MyClassLoader extends ClassLoader { @Override protected Class<?> findClass(String name) throws ClassNotFoundException { if ("com.example.MyClass".equals(name)) { // 从文件或网络中读取类的字节码,并转换为Class对象返回 byte[] classData = {/* class file data */}; return defineClass(name, classData, 0, classData.length); } return super.findClass(name); } } // 要动态加载的类 class MyClass { public void myMethod() { System.out.println("Hello, world!"); } } ``` 在上面的例子中,我们定义了一个要加载的类的全限定名为"com.example.MyClass",然后创建了一个自定义的ClassLoader实例MyClassLoader,使用它的loadClass方法动态加载该类。在加载成功后,我们创建了该类的实例,并调用了它的方法"myMethod",最终输出了"Hello, world!"。注意,由于我们使用的是自定义的ClassLoader,因此可以根据需要实现不同的加载方式,例如从文件或网络中读取类的字节码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值