ClassLoader 与 URLClassLoader 的用法

来源:互联网 发布:c语言switch case格式 编辑:程序博客网 时间:2024/06/01 08:37
  1. 读取配置文件中的信息
  1. 配置文件的内容:

用URLClassLoader读配置文件内容:

[java] view plaincopyprint?
  1. import java.io.IOException; 
  2. import java.net.URL; 
  3. import java.net.URLClassLoader; 
  4. import java.util.Properties; 
  5.  
  6.  
  7. public class Testext { 
  8.     public staticvoid main(String[] args) throws IOException { 
  9.         Properties properties = new Properties(); 
  10.         URL[] urls = new URL[] { new URL("file:/" 
  11.                 + System.getProperty("user.dir") +"/ravageWeb/") }; 
  12.         URLClassLoader ucl = new URLClassLoader(urls); 
  13.         //ClassLoader cl = Testext.class.getClassLoader();  //这两行也可以不写 
  14.         //cl = ucl;     //如果写,下面就要改为:cl.getResourceAsStream... 
  15.         properties.load(ucl.getResourceAsStream("resources/testpro.properties")); 
  16.         System.out.println(properties.getProperty("sui")); 
  17.     } 

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

              用ClassLoader读配置文件内容:

[html] view plaincopyprint?

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

[html] view plaincopyprint?
  1. import java.io.IOException; 
  2.  
  3. public class Testext { 
  4.     public static void main(String[] args) throws IOException, 
  5.             ClassNotFoundException { 
  6.         Class c = Testext.class.getClassLoader().loadClass("stalk.STalkClient"); 
  7.         System.out.println(c.getName());    //输出:stalk.STalkClient 
  8.     } 


用URLClassLoader载入一个类:

[html] view plaincopyprint?
  1. import java.io.IOException; 
  2. import java.net.URL; 
  3. import java.net.URLClassLoader; 
  4.  
  5. public class Testext { 
  6.     public static void main(String[] args) throws IOException, 
  7.             ClassNotFoundException { 
  8.          
  9.         URL[] urls = new URL[] { new URL("file:/" 
  10.                 + System.getProperty("user.dir") + "/ravageWeb/") }; 
  11.         URLClassLoader ucl =new URLClassLoader(urls); 
  12.         Class c = ucl.loadClass("NoPackage"); 
  13.         System.out.println(c.getName()); 
  14.     } 


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

总结:

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

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

 

0 0