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命令行调试就可成功。
- 浏览: 142445 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 414本篇博文主要是探讨类加载器,同时在本篇中列举的源 ... -
高并发分布式系统中生成全局唯一Id汇总
2017-05-23 09:56 1111数据在分片时,典型的 ... -
代码规范
2016-09-14 09:11 534随着软件行业的不断发展,历史遗留的程序越来越多,代码的维护成 ... -
在Eclipse中使用JUnit4进行单元测试(高级篇)
2016-05-17 16:49 592通过前 2 篇文章,您一定对 JUnit 有了一个基本的了解 ... -
在Eclipse中使用JUnit4进行单元测试(中级篇)
2016-05-17 16:48 590我们继续对初级篇中的例子进行分析。初级篇中我们使用Eclip ... -
在Eclipse中使用JUnit4进行单元测试(初级篇)
2016-05-17 16:47 532我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函 ... -
SimpleDateFormat使用详解
2015-05-21 17:43 433public class SimpleDateFormat ... -
java获取路径方法
2015-05-19 18:02 397一、这种方法在java项目和web项目都通用: I ... -
JAXB注解使用
2015-04-20 19:09 423一.Jaxb处理java对象和x ... -
XStream转换Java对象与XML
2015-04-13 20:41 5831.引入需要的jar包,在pom.xml中配置依赖 ... -
关于Java中使用容器的几个注意点
2015-03-20 09:17 533关于Java中使用容器的几个注意点 在看老代码时,看到 ... -
java动态代理(JDK和cglib)
2015-03-22 09:36 469JAVA的动态代理 代理模式 代理模式是常用的java设计 ... -
java动态代理
2015-03-22 09:36 437代理模式的作用是:为其他对象提供一种代理以控制对这个对象的 ... -
注解的用途及使用详解
2014-06-25 17:17 1010JAVA 注解的几大作用及使用方法详解(完) Posted ... -
线程池研究一
2014-01-24 10:19 539线程池的简单实现 一般一个简单线程池至少包含下列组成部分。 ... -
java中常见异常信息详解
2013-11-21 11:06 5281 java.lang.IllegalArgumentExc ... -
深入研究java.lang.ProcessBuilder类
2013-11-05 20:54 1111一、概述 ProcessBuilder ... -
Date类学习总结
2013-10-25 10:32 5521.计算某一月份的最大天数 Calendar tim ... -
java有关路径问题
2013-09-06 16:58 557用JAVA获取文件,听似简单,但对于很多像我这样的新人来说 ...
相关推荐
本文将详细解析如何在Java中获取`CLASSPATH`路径,并介绍相关的方法和技术。 首先,`ClassLoader`类是Java中负责加载类和资源的核心组件。它提供了两个方法来获取资源: 1. `public URL getResource(String name)`...
Java 项目中获取路径详解 在 Java 项目中,获取路径是非常重要的,因为它关系到项目的正确运行。特别是在 Java Web 项目中,获取路径变得更加复杂。下面我们将详细讨论 Java 项目中获取路径的方法和注意事项。 ...
### Java 文件路径获取方法详解 #### 一、引言 在Java开发中,经常会遇到需要获取文件路径的情况,尤其是在处理配置文件、图片等资源时。本文将详细介绍Java中获取文件路径的各种方法及其应用场景,帮助开发者更好...
java实现 获取指定路径下 指定格式 的所有文件
在Java编程语言中,了解如何获取类路径(classpath)是至关重要的,因为类路径决定了Java虚拟机(JVM)在运行时如何查找和加载类。本文将详细介绍在Java中获取类路径的几种常见方法,以供开发者参考。 首先,类路径...
在Java中,获取路径是操作文件和目录时的基本需求。正确地获取和使用路径对于文件的创建、读取、写入等操作至关重要。本篇总结将从多个角度介绍Java中获取路径的方法。 ### 1. 获取系统属性路径 Java提供了一种...
类加载器(`ClassLoader`)负责将编译后的`.class`文件加载到Java虚拟机(JVM)中执行,而类路径(`ClassPath`)则是指明了这些`.class`文件的位置。本文主要围绕Java类加载器和类路径展开讨论,以加深对Java运行时...
在Java编程中,获取Java路径以及CLASSPATH外部的路径是非常关键的操作,尤其当需要加载类、资源文件或进行系统级操作时。这篇文章主要探讨了几种获取这些路径的方法。 首先,我们来看一下如何获取Java路径。Java...
- **定义**:`classpath`是Java虚拟机(JVM)用来查找用户自定义类和资源的路径集合。 - **作用**:当Java程序运行时,JVM会根据`classpath`来定位所需的类文件(`.class`文件)和其他资源文件。如果没有正确配置`...
1. 相对于classpath的相对路径:如在`file:/D:/java/eclipse32/workspace/jbpmtest3/bin/`这个classpath路径下的相对路径,这意味着你需要结合classpath的基路径来解析资源的实际位置。 2. 相对于当前用户目录的相对...
1. **ClassPath路径**:这是Java虚拟机启动时加载类库(class or lib)的路径,也是加载项目自定义类的位置。 2. **WebRoot路径**:这是Web应用的根目录,包含了所有的静态资源、JSP页面以及Web-INF目录下的配置文件和...
为了更有效地使用路径,下面列出了一些获取当前classpath和类文件绝对路径的方法: 1. **使用 `FileTest.class.getResource("")`**:这种方法可以获取当前类 `FileTest.class` 文件的URI目录,但不包含自身。例如:...
浅谈web项目读取classpath路径下面的文件 本文主要介绍了web项目读取classpath路径下面的文件,涵盖了两种类型的web项目:...关键词:classpath 路径,java classpath 路径,获取classpath路径,maven classpath 路径
### Java中File的相对路径与绝对路径总结 在Java Web开发过程中,经常需要处理文件的读写操作,尤其是在运行时获取配置文件、动态加载对象等情况。对于这些需求,理解和掌握文件的相对路径与绝对路径至关重要。 ##...
- `java.io.File`类是处理文件和目录的主要工具,提供了创建、删除、重命名文件的方法,并且可以获取文件的绝对路径和父路径。 - `java.nio.file.Paths`和`java.nio.file.Path`类在Java 7引入,提供更现代和灵活的...
首先,我们来了解一下Java中的类路径(Classpath)。类路径是Java虚拟机(JVM)寻找类文件的路径集合,它决定了哪些目录和.jar文件被JVM用于加载类。默认情况下,Java会搜索当前目录("."),但通常我们需要自定义类...
在Java编程环境中,路径(Path)和类路径(Classpath)是两个至关重要的概念,它们对程序的编译和运行起着决定性的作用。本文将深入解析这两个概念,并结合源码和工具,帮助你理解它们的工作原理。 首先,让我们来...
通过获取当前`classpath`的`URI`形式的绝对路径,构建了相对路径的`URI`形式的绝对路径。尽管这是一种猜想,但可以确认的是,Java本质上只能使用绝对路径来查找资源,所有相对路径的方法本质上都是API帮助构建了绝对...