ClassLoader 与 URLClassLoader 的用法!
转自: http://blog.csdn.net/suiusoar/article/details/7530191
- 读取配置文件中的信息
配置文件的内容:
用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任意目录下的类!
?
?
?



