1. 程式人生 > >黑馬程式設計師:ClassLoader 與 URLClassLoader 的用法!

黑馬程式設計師: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培訓、期待與您交流! ----------------------