最近公司要求做一个eclipse plugin,这个plugin中要有很多树,每一颗树对应着一个XML文件,可是插件这个东西和我们的web应用有很大的区别。想取得这个XML文件相当的麻烦,用ClassLoader都取不到!也因为我的Eclipse plugin不熟,因为公司需要,第一次做。最后用的是System.getProperty("user.dir")这个方法面前搞定!可是后来又觉得这样做的话,软件的质量不好,由于这样,我才找寻取路径的方法。Web应用上的就不用说了!
包路径如下:
com.hp.conf 这是放置一些XML文件的,我在这里放了一个名叫123.xml的文件。
com.hp.util 这是放置一些java文件的,我现在想取到conf目录下的123.xml文件的InputStream。
1、 System.class.getResourceAsStream("/com/hp/conf/123.xml") 要注意路径前一定得有“/”。
2、 this.getClass().getResourceAsStream("../conf/123.xml") 这个方法是从本类的当前目录开始取的。
3、 ClassLoader.getSystemResourceAsStream("com/hp/conf/123.xml") 这个就是用ClassLoader取啦。
4、 Thread.currentThread().getContextClassLoader().getResource("com/hp/conf/123.xml") 这个方法据说比较的保险
System.getProperty("user.dir") 这是获取当前工作的目录的绝对路径。
java中取得上下文路径的方法(转)
1.在任意的class里调用
URLDecoder.decode(this.getClass().getClassLoader().getResource("/").getPath(), "UTF-8");
将获得当前class的全路径。
如 : C:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/clientweb/WEB-INF/classes
URLDecoder.decode负责把编码还原,不然路径中就会有类似于%20%ED等的符号。
2.可以在servlet的init方法里
String path = getServletContext().getRealPath("/");
这将获取web项目的全路径
例如c:/eclipse/workspace/tree/
tree是web项目的根目录
3.request.getContextPath();
获得web根的上下文环境
如 /tree
tree是web项目的root context