ClassLoader 与 URLClassLoader 的用法!

转自: http://blog.csdn.net/suiusoar/article/details/7530191

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

配置文件的内容:

用URLClassLoader读配置文件内容:

  1. import java.io.IOException;
  2. import java.net.URL;
  3. import java.net.URLClassLoader;
  4. import java.util.Properties;
  5. public class Testext {
  6. public static void main(String[] args) throws IOException {
  7. Properties properties = new Properties();
  8. URL[] urls = new URL[] { new URL("file:/"
  9. + System.getProperty("user.dir") + "/ravageWeb/") };
  10. URLClassLoader ucl = new URLClassLoader(urls);
  11. //ClassLoader cl = Testext.class.getClassLoader(); //这两行也可以不写
  12. //cl = ucl; //如果写,下面就要改为:cl.getResourceAsStream...
  13. properties.load(ucl.getResourceAsStream("resources/testpro.properties"));
  14. System.out.println(properties.getProperty("sui"));
  15. }
  16. }
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读配置文件内容:

  1. import java.io.IOException;
  2. import java.util.Properties;
  3. public class Testext {
  4. public static void main(String[] args) throws IOException {
  5. Properties properties = new Properties();
  6. properties.load(Testext.class.getClassLoader()
  7. .getResourceAsStream("resources/testpro.properties"));
  8. System.out.println(properties.getProperty("sui"));
  9. }
  10. }
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载入一个类:

  1. import java.io.IOException;
  2. public class Testext {
  3. public static void main(String[] args) throws IOException,
  4. ClassNotFoundException {
  5. Class c = Testext.class.getClassLoader().loadClass("stalk.STalkClient");
  6. System.out.println(c.getName()); //输出:stalk.STalkClient
  7. }
  8. }
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载入一个类:

  1. import java.io.IOException;
  2. import java.net.URL;
  3. import java.net.URLClassLoader;
  4. public class Testext {
  5. public static void main(String[] args) throws IOException,
  6. ClassNotFoundException {
  7. URL[] urls = new URL[] { new URL("file:/"
  8. + System.getProperty("user.dir") + "/ravageWeb/") };
  9. URLClassLoader ucl = new URLClassLoader(urls);
  10. Class c = ucl.loadClass("NoPackage");
  11. System.out.println(c.getName());
  12. }
  13. }
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任意目录下的类!

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值