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命令行调试就可成功。
相关推荐
java实现 获取指定路径下 指定格式 的所有文件
在Java编程中,读取项目中的文件,特别是位于`src`目录下的文件,是一个常见的需求。这涉及到对项目结构的理解和使用Java I/O流的知识。`src`目录通常包含源代码文件,而运行时,这些文件会被编译并放置到类路径...
本文将深入探讨如何使用Java读取资源文件,特别是properties类型的文件。 资源文件通常存储在项目的类路径(classpath)下,可以是.properties、.txt、.xml等形式,它们提供了与代码分离的配置选项。对于....
Java的classpath是每个Java开发者都必须了解的关键概念,它决定了JVM(Java虚拟机)在执行Java程序时如何查找和加载所需的类文件。本文将深入探讨classpath的基本原理、配置方式以及如何确保`javac`正确编译运行Java...
### Java 文件路径获取方法详解 #### 一、引言 在Java开发中,经常会遇到需要获取文件路径的情况,尤其是在处理配置文件、图片等资源时。本文将详细介绍Java中获取文件路径的各种方法及其应用场景,帮助开发者更好...
类加载器(`ClassLoader`)负责将编译后的`.class`文件加载到Java虚拟机(JVM)中执行,而类路径(`ClassPath`)则是指明了这些`.class`文件的位置。本文主要围绕Java类加载器和类路径展开讨论,以加深对Java运行时...
### Java读取PDF文件中的数据 #### 知识点概览 本文将详细介绍如何使用Java语言来读取PDF文件中的文本内容。此方法简洁高效,适用于处理大量的PDF文档。主要涉及的技术栈包括Java编程基础、PDFBox库的使用以及文件I...
Java 读取 Word、PDF 格式文档方法 Java 是一种广泛应用的编程语言,对文档操作是其重要的应用场景之一。本文将介绍 Java 如何读取 Word、PDF 格式文档的几种方法。 使用 Jacob Jacob 是一个桥接工具,连接 Java ...
- **作用**:当Java程序运行时,JVM会根据`classpath`来定位所需的类文件(`.class`文件)和其他资源文件。如果没有正确配置`classpath`,可能会导致类找不到异常(ClassNotFoundException)等错误。 #### 三、环境...
总结,Java中读取properties文件的方法包括使用Properties类加载文件、通过ClassLoader获取类路径下的文件以及利用try-with-resources语句进行资源管理。根据具体的应用场景,选择合适的方法可以更高效地处理配置...
在Java编程中,读取CSV(Comma Separated Values)文件是一项常见的任务,尤其是在处理数据导入、数据分析或数据存储时。CSV文件因其简洁、通用的格式而被广泛使用。本篇将详细介绍如何在Java中有效地读取CSV文件,...
在Java编程中,`CLASSPATH`是一个至关重要的环境变量,它定义了JVM在执行时查找类文件的位置。本文将详细解析如何在Java中获取`CLASSPATH`路径,并介绍相关的方法和技术。 首先,`ClassLoader`类是Java中负责加载类...
在Java编程中,读取配置文件是常见的任务,特别是在构建可扩展和灵活的应用程序时。配置文件通常存储了应用程序的参数、数据库连接信息、API密钥等敏感数据,需要在运行时动态加载。本实例代码将展示如何使用`Class....
在Java编程中,`properties`文件是一种常用的存储配置信息的方式,它以键值对的形式组织数据,便于程序在运行时动态获取和修改配置。本文将详细介绍如何在Java中读取`properties`配置文件。 首先,我们需要了解`...
本篇文章将详细探讨如何在Java中读取`properties`文件的值。 ### 1. `java.util.Properties` 类 Java提供了一个内置类 `java.util.Properties`,专门用于处理`.properties`文件。这个类继承了`HashTable`,并提供...
首先,使用Java类加载器(ClassLoader)获取资源路径是读取本地资源文件的一种方法。代码示例中的`getClass().getClassLoader().getResource("menu.json").toString();`就是实现该功能的代码片段。该方法能够获取到...
jxl是一个开源的Java库,它允许开发者读取、写入和修改Excel文件(.xls格式),非常适合在没有Microsoft Excel的情况下操作Excel数据。 首先,确保在项目中引入了jxl.jar库。这通常通过将jxl.jar添加到项目的类路径...
本篇文章将深入探讨如何在Java中读取`properties`文件,无需依赖任何第三方库。 首先,我们需要了解Java的标准库中提供的`java.util.Properties`类。这个类提供了一种存储和加载属性列表的方法,它能够处理`....
在Java编程环境中,读取Word文件通常涉及到对Microsoft Office文档格式的理解,以及使用特定的库来处理这些文件。本主题将深入探讨如何使用Java IO和`tm-extractors-0.4.jar`库来实现这一功能。`tm-extractors`是一...
Java读取Jar中资源文件的实现与应用 Java读取Jar中资源文件是一种常见的操作,在开发Java项目时,经常需要读取jar包中的资源文件。下面将详细介绍Java读取Jar中资源文件的实现代码和应用。 一、Java读取Jar中资源...