黑马程序员:ClassLoader 与 URLClassLoader 的用法!

---------------------- android培训java培训、期待与您交流! ----------------------

 

  1. 读取配置文件中的信息

配置文件的内容:

用URLClassLoader读配置文件内容:

import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Properties;

public class Testext {
	public static void main(String[] args) throws IOException {
		Properties properties = new Properties();
		URL[] urls = new URL[] { new URL("file:/"
				+ System.getProperty("user.dir") + "/ravageWeb/") };
		URLClassLoader ucl = new URLClassLoader(urls);
		//ClassLoader cl = Testext.class.getClassLoader(); 	//这两行也可以不写
		//cl = ucl; 	//如果写,下面就要改为:cl.getResourceAsStream...
		properties.load(ucl.getResourceAsStream("resources/testpro.properties"));
		System.out.println(properties.getProperty("sui"));
	}
}

遇到的问题:1. "/ravageWeb/" 中第二个 / 可写可不写。 但是若改为 "/ravageWeb/resources/" 则resources后必须加 /  否则报NullPointerException

              用ClassLoader读配置文件内容:

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

public class Testext {
	public static void main(String[] args) throws IOException {
		Properties properties = new Properties();
		properties.load(Testext.class.getClassLoader()
				.getResourceAsStream("resources/testpro.properties"));
		System.out.println(properties.getProperty("sui"));
	}
}

 

总结:很显然ClassLoader与URLClassLoader的区别是:

ClassLoader只能读位于classpath下的文件(即:resources/testpro.properties必须放到src目录下,编译后进入bin目录);

而URLClassLoader可以读任意目录下的文件!

       2. 载入一个类

用ClassLoader载入一个类:

import java.io.IOException;

public class Testext {
	public static void main(String[] args) throws IOException,
			ClassNotFoundException {
		Class c = Testext.class.getClassLoader().loadClass("stalk.STalkClient");
		System.out.println(c.getName());	//输出:stalk.STalkClient
	}
}


 

用URLClassLoader载入一个类:

import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;

public class Testext {
	public static void main(String[] args) throws IOException,
			ClassNotFoundException {
		
		URL[] urls = new URL[] { new URL("file:/"
				+ System.getProperty("user.dir") + "/ravageWeb/") };
		URLClassLoader ucl = new URLClassLoader(urls);
		Class c = ucl.loadClass("NoPackage");
		System.out.println(c.getName());
	}
}


遇到的问题:"/ravageWeb/" 中第二个 /  必须写,否则报ClassNotFoundException

 

总结:

ClassLoader只能load位于classpath(src目录)下的类;

而URLClassLoader可以load任意目录下的类!

 

 

 

---------------------- android培训java培训、期待与您交流! ----------------------

 

详细请查看:http://edu.csdn.net/heima

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

营赢盈英

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值