黑马程序员: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

你可能感兴趣的:(随便聊,classloader,properties,class,import,string,url)