String path2 = System.getProperty("user.dir") + File.separator + "languages"
+ File.separator + language + ".xml";
String path = getClass().getClassLoader().getResource(
"languages" + File.separator + language + ".xml").getFile();
以上兩個方法這樣用問題大大的有:
1. user.dir在普通的單機程序中一般不會出問題,但在網絡方面,如tomcat等,user.dir目錄有可能是tomcat的bin目錄等其他目錄。
2. ClassLoader使用的文件分隔符是'/',不管是在Unix還是Windows,所以在上面使用的: "languages" + File.separator + language + ".xml")
a. 在Windows里就是"languages\" + language + ".xml"),因為ClassLoader在這里并沒有把'\'作為文件分隔符,而是作為文件名里的一個字符,所以加載文件時會出錯。
b. 在Unix里是"languages/" + language + ".xml"): 運行正常
所以直接使用:
String path = getClass().getClassLoader().getResource("languages/" + language + ".xml").getFile();
ClassLoader有三種:系統使用的BootStrap ClassLoader, Extend ClassLoader(加載jre/lib/ext目錄里的類), Application ClassLoader(加載應用程序類,即用戶自己定義的類)