前言

  • java 1.8
  • springboot 2.5.4

ClassPathResource读取文件

ClassPathResource 表示从类路径获取资源,它使用线程上下文类加载器、给定的类加载器来加载资源。classpath 资源存在于类路径中的文件系统中或 jar 包里。

ClassPathResource 常用构造器

public ClassPathResource(String path);
public ClassPathResource(String path, @Nullable ClassLoader classLoader);
public ClassPathResource(String path, @Nullable Class<?> clazz);
  • public ClassPathResource(String path):使用默认的类加载器记载 path 类路径下的资源
  • public ClassPathResource(String path, @Nullable ClassLoader classLoader):使用指定的类加载器加载 path 类路径下的资源
  • public ClassPathResource(String path, @Nullable Class clazz):只用指定的类加载 path 类路径下的资源

示例1:读取 classpath 中的文件(1.txt

@SpringBootApplication
public class Demo1Application {public static void main(String[] args) {SpringApplication.run(Demo1Application.class, args);}@Beanpublic CommandLineRunner checkImage() {return (args)->{ClassPathResource cpr = new ClassPathResource("1.txt");System.out.println("1.txt is exists : " + cpr.getFile().exists());};}}

项目目录结构

项目
├─src
│  ├─main
│  │  ├─java
│  │  │  └─com
│  │  │      └─example
│  │  │          └─demo
│  │  │              └─Demo1Application.java
│  │  └─resources
│  │     ├─application.properties
│  │     └─1.txt
│  └─test
└─pom.xml

执行结果

  .   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::                (v2.5.4)2021-08-31 23:02:31.892  INFO 109456 --- [           main] com.example.demo.Demo1Application        : Starting Demo1Application using Java 1.8.0_144 on LAPTOP-F1O81IBU with PID 109456 (D:\sde\eclipse-workspace\demo-1\target\classes started by lhg in D:\sde\eclipse-workspace\demo-1)
2021-08-31 23:02:31.895  INFO 109456 --- [           main] com.example.demo.Demo1Application        : No active profile set, falling back to default profiles: default
2021-08-31 23:02:32.265  INFO 109456 --- [           main] com.example.demo.Demo1Application        : Started Demo1Application in 0.635 seconds (JVM running for 1.554)
1.txt is exists : true

示例2:找不到文件

代码与示例1一样。改变1.txt的位置(将文件移动到项目根目录)后,执行结果为:

  .   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::                (v2.5.4)2021-08-31 22:54:57.996  INFO 113616 --- [           main] com.example.demo.Demo1Application        : Starting Demo1Application using Java 1.8.0_144 on LAPTOP-F1O81IBU with PID 113616 (D:\sde\eclipse-workspace\demo-1\target\classes started by lhg in D:\sde\eclipse-workspace\demo-1)
2021-08-31 22:54:57.997  INFO 113616 --- [           main] com.example.demo.Demo1Application        : No active profile set, falling back to default profiles: default
2021-08-31 22:54:58.372  INFO 113616 --- [           main] com.example.demo.Demo1Application        : Started Demo1Application in 0.616 seconds (JVM running for 1.517)
2021-08-31 22:54:58.375  INFO 113616 --- [           main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-08-31 22:54:58.391 ERROR 113616 --- [           main] o.s.boot.SpringApplication               : Application run failedjava.lang.IllegalStateException: Failed to execute CommandLineRunnerat org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:794) [spring-boot-2.5.4.jar:2.5.4]at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:775) [spring-boot-2.5.4.jar:2.5.4]at org.springframework.boot.SpringApplication.run(SpringApplication.java:345) [spring-boot-2.5.4.jar:2.5.4]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) [spring-boot-2.5.4.jar:2.5.4]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) [spring-boot-2.5.4.jar:2.5.4]at com.example.demo.Demo1Application.main(Demo1Application.java:13) [classes/:na]
Caused by: java.io.FileNotFoundException: class path resource [1.txt] cannot be resolved to URL because it does not existat org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:202) ~[spring-core-5.3.9.jar:5.3.9]at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:150) ~[spring-core-5.3.9.jar:5.3.9]at com.example.demo.Demo1Application.lambda$0(Demo1Application.java:20) [classes/:na]at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:791) [spring-boot-2.5.4.jar:2.5.4]... 5 common frames omitted

参考

https://blog.csdn.net/qq_16830879/article/details/91876712

【Spring】Resource接口:ClassPathResource相关推荐

  1. Spring Resource接口获取资源

    1.1.1. Resource简介 在Spring内部实现机制,针对于资源文件(配置的xml文件)有一个统一的接口Resource. 1.1.1.1. 接口定义的方法 1.exists():判断资源文 ...

  2. Spring系列13:Resource接口及内置实现

    本文内容 Resource接口的定义 Resource接口的内置实现 ResourceLoader接口 ResourceLoaderAware 接口 一.Resource接口的定义 Java 的标准 ...

  3. Resource接口,及资源

    Resource介绍 编码的时候,除了代码本身,我们还需要对外部的资源进行处理.例如:URL资源.URI资源.File资源.ClassPath相关资源.服务器相关资源(VFS等)等等. 而这些资源的处 ...

  4. Spring.Resource与Spring资源获取方式

    讲到资源,就得提下Spring获取资源方式,常用的有两种 通过Resource接口的子类获取资源通过ResourceLoader接口的子类获取资源 Spring.Resource 资源操作函数一览 / ...

  5. java 接口 提供 路径,Java之Resource接口

    接口简介 JDK中提供了java.net.URL这个类来用于获取不同种类的资源(根据不同前缀的url可以获取不同种类的资源).但是URL这个类没有获取classpath和ServletContext下 ...

  6. Resource接口

    [转]https://blog.csdn.net/hbtj_1216/article/details/85487787 参考:官方文档 1 简介 Java标准库中的java.net.URL类和标准处理 ...

  7. Spring Resource和ResourceLoader源码解析

    Spring用Resource接口抽象所有的底层资源,包括File.ClassPath.URL等.ResourceLoader接口是Resource的加载器,根据资源的路径/路径模式获取Resourc ...

  8. java resources介绍_Java之Resource接口

    接口简介 JDK中提供了java.net.URL这个类来用于获取不同种类的资源(根据不同前缀的url可以获取不同种类的资源).但是URL这个类没有获取classpath和ServletContext下 ...

  9. 换一种方式编写 Spring MVC 接口

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 通常我们编写 Spring MVC 接口的范 ...

  10. springbean的生命周期_spring bean生命周期(涵盖spring常用接口的载入)

    spring bean生命周期流程图: ​ ​​​ 其中包含了很多常用的接口,可以参考spring 常用接口: 下面写个例子证明下: 1.实现InitializingBean以及各个Aware接口 p ...

最新文章

  1. you need python_Life is short,you need Python——Python序列(列表)
  2. C++ __gnu_pbds(平板电视)超详细教程(C++内置的平衡树,字典树,hash)
  3. 程序员生存定律--编程的起点与可能的失足
  4. (转)Maven之自定义archetype生成项目骨架
  5. 从头学习计算机网络_我如何通过从头开始构建网络爬虫来自动进行求职
  6. 谈谈我对MYSQL乱码的解决办法
  7. ros 双wan配置_基于ROS搭建简易软件框架实现ROV水下目标跟踪(九)--程序解析之PWM波下发...
  8. [深入学习C#]匿名函数、委托和Lambda表达式
  9. 点赞功能设计,网上的,留个底
  10. 《经济学人》报道Tether:在纽约被监管机构罚款
  11. bzoj 1710: [Usaco2007 Open]Cheappal 廉价回文【区间dp】
  12. shell打印正三角形
  13. 诺基亚入门级音乐手机售319元
  14. 调度 Cmax和∑Ci是什么区别
  15. 第七章 (四)BFS(路径寻找问题)
  16. 程序员没有那么多996!
  17. LQR:Linear Quadratic Regulator 线性二次型调节器
  18. Chrome 插件推荐
  19. 直击文印痛点 中小企业需要这样一台复合机
  20. 蕾哈娜首个护肤品牌全球发售;凯悦首旅如家合资首批五家逸扉酒店揭幕 | 美通企业日报...

热门文章

  1. 学习css3中的动画
  2. 手势检测的回调方法中onfling与onscroll的区别
  3. 反编译中内部类调用外部类成员问题
  4. 模板匹配(Match Template)
  5. Java中BigDecimal解决精度丢失问题
  6. Python里那些可爱的游戏模块们
  7. 第五章 常用Lua开发库2-JSON库、编码转换、字符串处理
  8. Gin新建一个项目的流程与函数
  9. Go之Beego原生查询QueryRow QueryRows Values ValuesList ValuesFlat RowsToMap RowsToStruct
  10. http访问不到服务器_HTTP及会话技术解析:大魏Java记4