获取resources路径下文件方法 ClassPathResource, getResource ,getResourceAsStream

1 this.getClass().getResource(filepath)  

当执行this.getClass().getResource("")  时,获取到的路径是调用方法所在类的路径。

当执行this.getClass().getResource("/") 时,获取到的路径是resources的路径,所有模块的resources路径都会扫描到,所以想使用此方法获取resources必须以"/" 开头

如果想直接获取resources下的文件流可用此方法可以使用getResourceAsStream()

例如:this.getClass().getResourceAsStream("/template/test.csv")

将会读取到resources路径下的template/test.csv文件

2 this.getClass().getClassLoader().getResource(filepath) 

此方法会直接相对于resources根路径读取文件,不需要加"/"

例如:this.getClass().getResourceAsStream("template/test.csv")

将会读取到resources路径下的template/test.csv文件

同样的,如果想直接获取resources下的文件流,可以使用getResourceAsStream()

例如:this.getClass().getClassLoader().getResourceAsStream("/template/test.csv")

3 new ClassPathResource(filepath).getInputStream()

此方法依赖spring框架,此方法会直接相对于resources根路径读取文件,不需要加"/"

例如:new ClassPathResource("template/test.csv").getInputStream()

觉得有用,求点个赞!

### Spring 中 ClassPathResource 的使用方法 #### 什么是 ClassPathResource? `ClassPathResource` 是 Spring 提供的一个工具类,主要用于加载位于类路径下的资源文件。它实现了 `Resource` 接口,并提供了多种方式来访问这些资源[^1]。 --- #### 创建 ClassPathResource 实例的方式 可以通过以下几种方式创建 `ClassPathResource` 对象: 1. **基于字符串路径** 如果资源路径是相对于类路径根目录,则可以直接传入路径字符串: ```java ClassPathResource resource = new ClassPathResource("config.properties"); ``` 2. **基于特定类的相对路径** 当资源文件位于某个具体类所在包下时,可以指定该类作为参数: ```java ClassPathResource resource = new ClassPathResource("resources/file.txt", MyClass.class); ``` 这里的 `"resources/file.txt"` 是相对于 `MyClass` 所在包的位置[^3]。 3. **通过线程上下文类加载器** 可以利用默认的线程上下文类加载器加载资源: ```java ClassPathResource resource = new ClassPathResource("data.json"); InputStream inputStream = resource.getInputStream(); ``` --- #### 常见操作示例 以下是几个常见的用法示例: ##### 示例 1:读取配置文件的内容 假设有一个名为 `application.properties` 的文件存储在类路径下,我们可以这样读取其内容: ```java import org.springframework.core.io.ClassPathResource; import java.io.BufferedReader; import java.io.InputStreamReader; public class ResourceExample { public static void main(String[] args) throws Exception { ClassPathResource resource = new ClassPathResource("application.properties"); try (BufferedReader reader = new BufferedReader(new InputStreamReader(resource.getInputStream()))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } } } ``` 上述代码会逐行打印出 `application.properties` 文件中的每一行数据[^4]。 ##### 示例 2:将资源转换为字节数组 如果需要将整个资源文件加载到内存中作为一个字节数组,可按如下实现: ```java import org.springframework.core.io.ClassPathResource; import org.apache.commons.io.IOUtils; public class ByteArrayExample { public static void main(String[] args) throws Exception { ClassPathResource resource = new ClassPathResource("image.png"); byte[] bytes = IOUtils.toByteArray(resource.getInputStream()); // 处理字节数组... } } ``` ##### 示例 3:判断资源是否存在 有时我们需要先确认资源是否可用再执行后续逻辑: ```java import org.springframework.core.io.ClassPathResource; public class ExistenceCheck { public static void main(String[] args) { ClassPathResource resource = new ClassPathResource("missing-file.txt"); if (!resource.exists()) { System.out.println("The file does not exist."); } else { System.out.println("File found!"); } } } ``` --- #### 特殊场景支持 除了基本功能外,`ClassPathResource` 还能处理一些特殊需求,比如从 JAR 包内部加载资源或者跨模块项目结构中的资源共享问题[^2]。 例如,在打包后的应用程序中查找嵌套于 JAR 文件内的静态 HTML 页面或其他前端资产文件。 --- #### 总结 `ClassPathResource` 是一种简单而强大的机制,能够帮助开发者轻松定位并管理运行时所需的外部依赖项或辅助材料。无论是简单的属性文件还是复杂的多媒体素材,都可以借助这一 API 完成高效加载与解析工作[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值