黑馬程式設計師:ClassLoader 與 URLClassLoader 的用法!
阿新 • • 發佈:2019-02-12
---------------------- android培訓、java培訓、期待與您交流! ----------------------
- 讀取配置檔案中的資訊
配置檔案的內容:
用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培訓、期待與您交流! ----------------------