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(加载应用程序类,即用户自己定义的类)