tbwshc
JAVA获取CLASSPATH路径
ClassLoader
提供了两个方法用于从装载的类路径中取得资源:
public URL
getResource
(String name);
public InputStream
getResourceAsStream
(String name);
这里name是资源的类路径,它是相对与“/”根路径下的位置。getResource得到的是一个URL对象来定位资源,而getResourceAsStream取得该资源输入流的引用保证程序可以从正确的位置抽取数据。
但是真正使用的不是ClassLoader的这两个方法,而是Class的 getResource和getResourceAsStream方法,因为Class对象可以从你的类得到(如YourClass.class或 YourClass.getClass()),而ClassLoader则需要再调用一次YourClass.getClassLoader()方法,不过根据JDK文档的说法,Class对象的这两个方法其实是“委托”(delegate)给装载它的ClassLoader来做的,所以只需要使用 Class对象的这两个方法就可以了。
因此,直接调用
this.getClass().getResourceAsStream(String name)
;获取流,静态化方法中则使用
ClassLoader.getSys
tb
emResourceAsStream
(String name)
; 。
下面是一些得到classpath和当前类的绝对路径的一些方法。你可能需要使用其中的一些方法来得到你需要的资源的绝对路径。
1.
this.getClass().getResource("")
得到的是当前类class文件的URI目录。不包括自己!
如:file:/D:/workspace/jbpmtest3/bin/com/test/
2.
this.getClass().getResource
("/")
得到的是当前的classpath的
绝对URI路径
。
如:file:/D:/workspace/jbpmtest3/bin/
3.
this.getClass()
.
getClassLoader().getResource("")
得到的也是当前ClassPath的
绝对URI路径
。
如:file:/D:/workspace/jbpmtest3/bin/
4.
ClassLoader.
getSystemResource("")
得到的也是当前ClassPath的
绝对URI路径
。
如:file:/D:/workspace/jbpmtest3/bin/
5.
Thread.currentThread().
getContextClassLoader
().getResource("")
得到的也是当前ClassPath的
绝对URI路径
。
如:file:/D:/workspace/jbpmtest3/bin/
6.
ServletActionContext.getServletContext().
getRealPath(“/”)
Web应用程序
中,得到Web应用程序的根目录的绝对路径。这样,我们只需要提供相对于Web应用程序根目录的路径,就可以构建出定位资源的绝对路径。
如:file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/WebProject
注意点:
1.尽量不要使用相对于System.getProperty("user.dir")当前用户目录的相对路径。这是一颗定时炸 弹,随时可能要你的命。
2.尽量使用URI形式的绝对路径资源。它可以很容易的转变为URI,URL,File对象。
3.尽量使用相对classpath的相对路径。不要使用绝对路径。使用上面ClassLoaderUtil类的public static URL getExtendResource(String relativePath)方法已经能够使用相对于classpath的相对路径定位所有位置的资源。
4.绝对不要使用硬编码的绝对路径。因为,我们完全可以使用ClassLoader类的getResource("")方法得到当前classpath的绝对路径。如果你一定要指定一个绝对路径,那么使用配置文件,也比硬编码要好得多!
获得CLASSPATH之外路径的方法:
URL base = this.getClass().getResource(""); //先获得本类的所在位置,如/home/popeye/testjava/build/classes/net/
String path = new File(base.getFile(), "……/……/……/"+name).getCanonicalPath(); //就可以得到/home/popeye/testjava/name
另外,如果从ANT启动程序,this.getClass().getResource("")取出来的比较怪,直接用JAVA命令行调试就可成功。
posted on 2012-07-04 13:17
chen11-1
阅读(1175)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
My Links
BlogJava
首页
联系
聚合
管理
Blog Stats
Posts - 193
Stories - 21
Comments - 56
Trackbacks - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
hibernate(1)
(RSS)
oracle(9)
(RSS)
我在东软(1)
(RSS)
随笔(5)
(RSS)
随笔档案
2013年10月 (3)
2013年9月 (4)
2013年8月 (2)
2013年7月 (2)
2013年6月 (5)
2013年5月 (1)
2012年9月 (36)
2012年8月 (61)
2012年7月 (50)
2012年6月 (27)
2012年5月 (2)
文章分类
java(5)
(RSS)
javascript(1)
(RSS)
oracle(5)
(RSS)
文章档案
2013年9月 (2)
2013年8月 (1)
2013年6月 (1)
2013年5月 (1)
2012年7月 (2)
2012年6月 (12)
2012年5月 (2)
新闻档案
2013年6月 (4)
2013年5月 (2)
2012年7月 (1)
2012年6月 (1)
tbw淘宝商城-首页
tbw淘宝商城-首页
(RSS)
tbw淘宝商城首页是集tbw淘宝网商城女装,男装,内衣,男鞋,女鞋,运动鞋,童装,手表,饰品,化妆品,手机,相机为一体的购物网站,tbw淘宝商城首页给推荐你最好淘宝店铺.
搜索
最新评论
1. re: js控制页面刷新等操作 [未登录]
1
--1
2. re: Java项目经验——程序员成长的关键
之前看了一遍,并没有完全理解,现在做了一段时间之后再回来读一次,有了更加深切的体会。
--xhzwxhz
3. re: Hibernate 所有缓存机制详解
神州行 我看行
--和大象掰腕子
4. re: 用html+js+css做一个模拟键盘 [未登录]
henhao
--陈浩
5. re: Hibernate 所有缓存机制详解[未登录]
太厉害了,写的太好了~
--微笑
阅读排行榜
1. java实现异步调用实例(22725)
2. Oracle 的Blob使用小结(17817)
3. Java项目经验——程序员成长的关键(13241)
4. PHP-FPM高负载的解决办法(11733)
5. 安装ORACLE时在Linux上设置内核参数的含义(10558)
评论排行榜
1. java实现异步调用实例(9)
2. Java项目经验——程序员成长的关键(5)
3. 解决jsp参数传递乱码的问题(3)
4. 文件FTP上传支持断点续传demo(3)
5. 提高代码可读性的十大注释技巧(2)
Powered by:
BlogJava
Copyright © chen11-1