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.getSystbemResourceAsStream (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命令行调试就可成功。
分享到:
相关推荐
"java+pdf转word+word转pdf 无水印 无页数限制"这一标题揭示了我们讨论的是一个能够进行这两种转换,并且在转换过程中不添加水印,且不受页面数量限制的解决方案。以下是对这个主题的详细知识点解释: 1. **PDF转...
下面我们将详细讨论 Java 项目中获取路径的方法和注意事项。 获取相对路径 在 Java 项目中,获取相对路径可以使用 `getResource` 方法。这个方法可以返回当前类的相对路径。在静态方法中,可以使用 `Test.class....
在Java编程中,获取Java路径以及CLASSPATH外部的路径是非常关键的操作,尤其当需要加载类、资源文件或进行系统级操作时。这篇文章主要探讨了几种获取这些路径的方法。 首先,我们来看一下如何获取Java路径。Java...
### Java 1.7.0 环境配置与安装详解 #### 一、概述 在Windows XP系统中安装配置Java ...通过上述详细介绍,相信您已经掌握了在Windows XP环境下安装配置Java 1.7.0的方法。希望这些信息对您的学习和工作有所帮助。
使用`FindClass`查找类,`GetStaticMethodID`获取静态方法的ID,然后使用`CallStaticVoidMethod`或相应的Call方法来执行Java方法。 步骤6:处理结果和异常 Java方法的调用可能会抛出异常,因此你需要检查JNI环境的...
8. **改进的类型推断**:Java编译器的类型推断能力得到了增强,能更好地理解lambda表达式的类型,从而简化了代码。 9. **并发改进**:Java 8在并发包java.util.concurrent中也做了一些改进,例如Fork/Join框架和...
- **二进制转十进制**:对于二进制数,从右向左按位乘以2的幂次,然后将所有结果相加得到十进制数。 理解这些基本概念是学习Java编程的基础。通过实践编写代码,分析问题,确定步骤,并运用适当的Java语言结构,...
### Java调用MATLAB的方法详解 #### 一、前言 在软件开发领域,尤其是在科研与数据分析方面,MATLAB以其强大的数学计算能力和便捷的数据可视化工具而受到广泛欢迎。然而,在实际应用中,很多系统是基于Java语言...
以上三种方法在本例中都将得到相同的结果。 #### 六、注意事项 - 当使用`Class.getResource`或`Class.getResourceAsStream`时,如果路径不以 `/` 开头,那么查找将从调用该方法的类所在的包开始。 - 当使用`...
* Classpath:类路径,用于指定 Java 类的查找路径。 * Version:版本,用于标识 Java 语言的版本号。 * Author:作者,用于标识 Java 语言的作者。 * Public:公共的,用于标识 Java 类或成员的访问权限。 * Class...
2. 动态代理:JDK6引入了`java.lang.reflect.Proxy`类,允许动态创建代理对象,实现接口方法的调用。 3. 注解(Annotation):增强了代码的元数据功能,可以用于编译时检查、运行时处理等。 4. 自动装箱与拆箱:简化...
我们平时经常会碰见java异常,并且得到异常的方法用e.printstacktrace 实际上程序正常运行时也是会有stack trace的,只不过平时不显示出来而已。如何能正常及时显示堆栈信息呢!因为 这个对于定位死锁很重要,很简单...
在Java中读取本地json文件及进行相应处理的方法是一个常见且重要的技术需求。在该领域,常用的技术手段包括使用类加载器获取资源路径、读取文件内容到字符串、使用JSONObject和JSONArray等库将字符串转换为对象,并...
1996年,Java获得了1亿美金的投资,1998年推出JDK1.2,更名为Java2。随后JDK1.3、JDK1.4相继推出。2005年,JDK更名为JDK5.0,是之前版本的重大改进。2007年推出JDK6.0,2009年Oracle收购Sun。2011年Oracle发布Java7...
可获得更多用法。) 举例: 第一步:编写文件 D:\test\Hello.java: package test; public class Hello { public static void main(String argv[]) { System.out.println("Hello, world"); } } 第二步:编译...
安装`jdk-8u371-windows-x64.exe`文件后,开发者将获得完整的Java开发环境,可以编写、编译、调试和运行Java程序。通过设置环境变量`JAVA_HOME`、`PATH`和`CLASSPATH`,确保系统可以正确识别和使用JDK。同时,安装...