当你想要在java类包中某个层次上添加一个非java文件,像资源文件,XML配置文件
或其他格式文件的时候, Class.getResource()
是一个很有用的方法,它不是根据
绝对路径来定位某个资源(文件),而是根据相对类路径来定位资源。当我们用绝对路径
来定位java类包中某个层次的资源时,项目的部署和迁移可能会出现问题,而且跨平台
运行也会出现问题。(像 "c:/1.txt"这个文件路径 在linux里是不能被识别的)
下面显示了一个类层次:
+bin--
+test_1--
Test.class
+test_2--
hello_en.txt
hello_zh.txt
注意:
资源文件必须在编译后类路径里才能通过Class.getResource()
的方式被定位 ,
而不是在源文件路径里。
下面是Test_1的代码用来定位和读取hello_en.txt文件
package test_1;
import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.net.URISyntaxException;
import java.net.URL;
import java.io.FileReader;
public class Test {
public static void main(String[] args) throws URISyntaxException, IOException {
//根据类包根层次的相对路径来定位hello_en.txt文件
URL url = Test_1.class.getResource("/test_1/test_2/hello_en.txt");
//定位hello_en.txt的另外一种方式
//根据当前类文件Test_1.class的相对路径来定位hello_en.txt文件
//URL url = Test_1.class.getResource("test_2/hello_en.txt");
File file = new File(url.toURI());
StringBuffer buffer = new StringBuffer();
Reader reader = new FileReader(file);
int ch = reader.read();
while(ch != -1){
buffer.append((char)ch);
ch = reader.read();
}
reader.close();
System.out.println(buffer.toString());
}
}
运行这个类文件,输出结果如下(hello_en.txt 文件的内容为 hello !):
hello !
定位hello_zh.txt文件的代码片段如下(当然也有两种方式):
URL url = Test_1.class.getResource("/hello_zh.txt");
或者
URL url = Test_1.class.getResource("../hello_zh.txt");
还有一点需要注意
,用
File file = new File(url.toURI());
来获取一个File对象,最好不能用
File file = new File(url.getFile());
因为URL.getFile()返回的文件路径字符串自动将空格转换为了ASC2编码,如果在你的绝对文件路径中含有空格,就会无法定位到这个文件,当时在这快也确实让我迷惑了一下。
Class.getResourceAsStream()
也可以用于定位和获取资源文件,和Class.getResource差不多,不过返回的是一个InputStream对象。
分享到:
相关推荐
本篇文章将详细探讨Java提供的两种主要方法:`Class.getResource`和`Class.getResourceAsStream`,用于加载类路径下的资源文件。 首先,`Class.getResource`方法返回一个`URL`对象,它表示资源的位置。这个方法接受...
你可以通过`Thread.currentThread().getContextClassLoader().getResource()`或`YourClass.class.getResource()`来获取`URL`对象,然后使用`InputStream`读取资源内容。例如: ```java URL resource = getClass()....
1、 URLTest.class.getResource(/).getPath(); URLTest.class.getResource(/).getFile(); URLTest.class.getClassLoader().getResource().getPath(); Thread.currentThread()....
System.out.println(Test.class.getClassLoader().getResource("")); ``` 4. **使用`ClassLoader.getSystemResource("")`**: - 获取系统类加载器的资源路径。 - 示例代码: ```java System.out.println...
在静态方法中,可以使用 `Test.class.getResource("").getPath()`,而在非静态方法中,可以使用 `this.getClass().getResource("").getPath()` 或 `Test.class.getResource("").getPath()`。这两个方法都可以获取...
- 当使用`Class.getResource`或`Class.getResourceAsStream`时,如果路径不以 `/` 开头,那么查找将从调用该方法的类所在的包开始。 - 当使用`ClassLoader.getResource`或`ClassLoader.getResourceAsStream`时,路径...
1. 使用`Class.getResource`或`ClassLoader.getResource`,这两个方法都需要传入相对类路径的字符串。 2. 使用Guava的`Resources.getResource`,它提供了一种更简洁的接口,同时支持绝对和相对路径。 理解并掌握...
在 Java 编程的 Class 中,我们可以使用 `Class.getResource()` 方法来获取相对路径和绝对路径。例如,我们可以使用 `FileTest.class.getResource("")` 来获取当前类的相对路径,使用 `FileTest.class.getResource(...
这是因为通过class.getResource()方法在IDEA中运行的路径和生成jar包获取的的路径是不同的。打成jar包后,获取图片的路径中有"xxx.jar!"这里面的内容是不能够被操作系统识别出来的,因此直接通过路径来获取文件是不...
2. `FileTest.class.getResource("/")`:这个方法会返回当前classpath的绝对URI路径,即`file:/D:/java/eclipse32/workspace/jbpmtest3/bin/`,这是项目根目录的位置。 3. `Thread.currentThread()....
当使用`TestURL().class.getResource("").getPath()`或`TestURL().class.getResource("").getFile()`获取路径时,如果路径中包含空格或其他特殊字符,如%,#,[]等,Java会对其进行URL编码。空格会被编码为"%20"。...
在这个例子中,`DriverManager.getConnection()` 方法用于创建数据库连接。URL(Uniform Resource Locator)指定了数据库的地址,包括主机名、端口号和数据库名称。用户凭据(用户名和密码)用于身份验证。 在实际...
try (InputStream in = resource.getInputStream()) { props.load(in); String dbUrl = props.getProperty("db.url"); System.out.println("Database URL: " + dbUrl); } catch (IOException e) { e....
首先,我们可以通过`java.lang.Class`类的`getResource`或`getResourceAsStream`方法来获取类路径中的资源文件路径。这两个方法都是在类路径中查找资源,返回一个URL对象,从中可以获取路径信息。例如,如果我们有一...
URL file1 = getClass().getResource(choics[0]); //声音文件1 URL file2 = getClass().getResource(choics[1]); //声音文件2 AudioClip sound1 = java.applet.Applet.newAudioClip(file1); //声音剪辑对象1 ...
3. 使用Java的 `File` 类或 `Class.getResource()` 方法来验证路径是否有效,这些方法在路径格式不正确时会抛出异常。 4. 在IDE或日志中打印出实际使用的路径,以帮助定位问题所在。 5. 如果问题涉及框架配置(如...
当你需要获取与类相关的资源文件的绝对路径时,可以使用 `Class.getResource()` 或 `Class.getResourceAsStream()` 方法。这些方法返回一个 `java.net.URL` 对象,可以通过调用 `getPath()` 来获取路径字符串。例如...
java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...
使用`Class.getResource()`和`ClassLoader.getResource()` 这两种方法用于获取类路径下的资源文件路径,特别适用于JAR包或类加载器管理的资源。 ##### 示例代码: ```java URL xmlPath = this.getClass()....