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.getSystemResourceAsStream (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命令行调试就可成功。
- 浏览: 135674 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (165)
- RCP技术 (6)
- 工作流 (0)
- web (9)
- java (20)
- 数据库 (18)
- 网络 (3)
- dos (7)
- win7 (1)
- 好工具 (2)
- webservice (3)
- 网站收集 (1)
- java框架 (18)
- xml (1)
- linux (3)
- php (3)
- 线程池 (3)
- jvm (4)
- android (1)
- seo (1)
- sqlserver (1)
- svn (5)
- spring (8)
- hibernate (2)
- io (5)
- 多线程 (2)
- 通讯方式 (1)
- java面试 (1)
- SSH (1)
- 缓存 (8)
- jboss (1)
- eclipse (1)
- 互联网 (1)
- http (1)
- spring实现任务调度 (1)
- JAXB注解使用 (1)
- hessian (2)
- tbscheduler教材 (1)
- junit4 (1)
- redis (5)
- maven (1)
- 工具 (0)
- jackson (1)
- ibatis (1)
- mac (0)
- 编程规范 (2)
- 性能调优 (1)
- ELK (1)
- 分布式 (2)
最新评论
-
huanhuanChallenge:
同求源码
Eclipse 向导机制扩展 -- 实现可定制的向导 -
linjunjie369865393:
context.xml 内容是什么?求贴出来。
java HttpServer构建http服务器 -
xjeryi:
您好,您的附件在哪,能看下您例子的源代码么
Eclipse 向导机制扩展 -- 实现可定制的向导 -
yxc_gdut:
function getParam(url){
var r ...
js获取url参数
发表评论
-
java类加载器
2018-07-08 20:00 0本篇博文主要是探讨类加载器,同时在本篇中列举的源 ... -
java类加载器
2018-07-08 19:15 363本篇博文主要是探讨类加载器,同时在本篇中列举的源 ... -
高并发分布式系统中生成全局唯一Id汇总
2017-05-23 09:56 1069数据在分片时,典型的 ... -
代码规范
2016-09-14 09:11 488随着软件行业的不断发展,历史遗留的程序越来越多,代码的维护成 ... -
在Eclipse中使用JUnit4进行单元测试(高级篇)
2016-05-17 16:49 543通过前 2 篇文章,您一定对 JUnit 有了一个基本的了解 ... -
在Eclipse中使用JUnit4进行单元测试(中级篇)
2016-05-17 16:48 554我们继续对初级篇中的例子进行分析。初级篇中我们使用Eclip ... -
在Eclipse中使用JUnit4进行单元测试(初级篇)
2016-05-17 16:47 497我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函 ... -
SimpleDateFormat使用详解
2015-05-21 17:43 386public class SimpleDateFormat ... -
java获取路径方法
2015-05-19 18:02 358一、这种方法在java项目和web项目都通用: I ... -
JAXB注解使用
2015-04-20 19:09 374一.Jaxb处理java对象和x ... -
XStream转换Java对象与XML
2015-04-13 20:41 5411.引入需要的jar包,在pom.xml中配置依赖 ... -
关于Java中使用容器的几个注意点
2015-03-20 09:17 490关于Java中使用容器的几个注意点 在看老代码时,看到 ... -
java动态代理(JDK和cglib)
2015-03-22 09:36 431JAVA的动态代理 代理模式 代理模式是常用的java设计 ... -
java动态代理
2015-03-22 09:36 405代理模式的作用是:为其他对象提供一种代理以控制对这个对象的 ... -
注解的用途及使用详解
2014-06-25 17:17 965JAVA 注解的几大作用及使用方法详解(完) Posted ... -
线程池研究一
2014-01-24 10:19 466线程池的简单实现 一般一个简单线程池至少包含下列组成部分。 ... -
java中常见异常信息详解
2013-11-21 11:06 4861 java.lang.IllegalArgumentExc ... -
深入研究java.lang.ProcessBuilder类
2013-11-05 20:54 1066一、概述 ProcessBuilder ... -
Date类学习总结
2013-10-25 10:32 5101.计算某一月份的最大天数 Calendar tim ... -
java有关路径问题
2013-09-06 16:58 513用JAVA获取文件,听似简单,但对于很多像我这样的新人来说 ...
相关推荐
主要介绍了Java 中获取类路径 classpath 的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
java实现 获取指定路径下 指定格式 的所有文件
java project和java web project项目中如何获得相对路径、绝对路径问题详解
下面小编就为大家带来一篇Java中获取类路径classpath的简单方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本篇文章是对获取JAVA路径,包括CLASSPATH外的路径的方法进行了详细的分析介绍,需要的朋友参考下
文中指出尽量不要使用相对于System.getProperty(\\\"user....使用上面 ClassLoaderUtil类的public static URL getExtendResource(String relativePath)方法已经能够使用相对于classpath的相对路径定位所有位置的资源。
主要介绍了浅谈web项目读取classpath路径下面的文件,具有一定借鉴价值,需要的朋友可以参考下
获取当前执行的classpath的所有jar包的路径 * 3.通过java的ToolProvider创建JavaCompile,用来执行class源文件 * 4.创建DiagnosticCollector用来执行获取执行失败的错误结果 * 5.添加动态执行的编译环境 options ...
CLASSPATH: Java类路径,用于指定Java类文件的搜索路径。我们可以将多个目录或JAR文件用分号;分隔指定在CLASSPATH中。 PATH: 系统环境变量,包含可执行文件的搜索路径。我们需要将JAVA_HOME/bin添加到PATH中,这样我们...
classpath:前缀是不需要的,默认就是指项目的classpath路径下面; 如果要使用绝对路径,需要加上file:前缀表示这是绝对路径; 对于FileSystemXmlApplicationContext: 默认表示的是两种: 1.没有盘符的是项目工作路径,即...
将该路径设置为JAVA_HOME环境变量,并使用setx命令使其永久生效。 显示切换结果: 显示成功切换JAVA_HOME环境变量至所选JDK版本的信息。 退出操作: 用户按任意键后退出脚本执行。 使用方法: 运行脚本时,会列出...
2.1.3 jvm(java)与classpath 27 2.1.4 编译程序(javac)与classpath 30 .2.2 管理原始码与位码文档 31 2.2.1 编译程序(javac)与sourcepath 31 2.2.2 使用package管理类 33 2.2.3 使用import偷懒 36 2.3 ...
ansible-javax 用于以更简洁,更类似于Ansible的方式执行任意java类或jar的...要使用的Java JVM的路径。 如果未提供,将使用解析二进制路径的常规机制。 init_heap_size 设置应用程序的初始Java堆大小。 等效于-Xms'
37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别? 38.列举三种以上垃圾回收算法,并比较其优缺点? 39.编写代码实现一个线程池 40.描述一下JVM加载class文件的原理机制? 41....
源代码来自http://blog.163.com/scau_09se01/blog/static/1817110742011214599452 本人在其基础上进行了些许修改,添加JAVA_HOME环境变量,解决了jdk安装路径包含空格时不能正确获取信息的bug
类路径生成器该节点的库有助于构建Java-Classpath。 样例代码: var classpathBuilder = require ( './classpathBuilder.js' ) ;classpathBuilder . build ( '<Directory>' , function ( classpath ) {console . log...
Core在8至17-ea的Java版本上进行了测试,它是一个完全独立,高级,免费和开放源代码的Java框架构建库,它对于扫描类路径,在运行时生成类,促进使用反射,扫描非常有用。文件系统,执行字符串化的源代码等等。 ...
如果使用Druid,则需参考druid-example.setting创建${classpath}/config/druid.setting文件,详情请参考官方文档 使用C3P0则需要参考c3p0-config-example.xml创建${classpath}/c3p0-config.xml来调节C3P0参数 此时...
使用Jflex和Antlr的Java中的Lexical Analyzer,对于语言“ fun”,请检查语法和有关language.pdf的规范以获取语言详细信息。 另外,您将需要设置antlr的路径,在我的情况下,这是命令:export CLASSPATH =“。:/ ...
推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它...