springboot读取resources下文件的方式详解


Posted in Java/Android onJune 21, 2022

项目中很多时候需要读取自定义配置文件,本地开发工具怎么写都成功但是部署到服务其上就出现问题,

异常BOOT-INF/classes!/config.xml (文件名、目录名或卷标语法不正确.)路径中带有叹号之类的

了解了大概之后就是springboot打成jar是一个文件,也就是一个压缩包,没有办法读取压缩文件里的路径,因此要解决这个问题了解读取配置文件的原理,直接获取文件流就可以了。

springboot读取resources下文件的方式详解

1、使用项目内路径读取,只能在开发工具中使用,部署之后无法读取。(不通用

类似:src/main/resources/default.xml

File file = new File("src/main/resources/default.xml");

@Test
    public void testReadFile2() throws IOException {
        File file = new File("src/main/resources/default.xml");
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);
        String data = null;
        while((data = br.readLine()) != null) {
            System.out.println(data);
        }
        
        br.close();
        isr.close();
        fis.close();
    }

 2、使用org.springframework.util.ResourceUtils,读取。在linux环境中无法读取。(不通用)

File file = ResourceUtils.getFile("classpath:default.xml");
FileInputStream fis = new FileInputStream(file);

@Test
    public void testReadFile3() throws IOException {
        File file = ResourceUtils.getFile("classpath:default.xml");
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);
        String data = null;
        while((data = br.readLine()) != null) {
            System.out.println(data);
        }
        
        br.close();
        isr.close();
        fis.close();
    }

3、使用org.springframework.core.io.ClassPathResource,各种环境都能读取。(通用)

Resource resource = new ClassPathResource("resource.properties");
InputStream is = resource.getInputStream();

@Test
    public void testReadFile() throws IOException {
//        ClassPathResource classPathResource = new ClassPathResource("default.xml");
        Resource resource = new ClassPathResource("default.xml");
        InputStream is = resource.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String data = null;
        while((data = br.readLine()) != null) {
            System.out.println(data);
        }
        
        br.close();
        isr.close();
        is.close();
    }

4、结合spring注解,使用org.springframework.core.io.ResourceLoader;类的注解。(通用)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.test.context.junit4.SpringRunner;
 
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
 
    @Autowired
    ResourceLoader resourceLoader;
    
    
    @Test
    public void testReaderFile() throws IOException {
        Resource resource = resourceLoader.getResource("classpath:default.xml");
        InputStream is = resource.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String data = null;
        while((data = br.readLine()) != null) {
            System.out.println(data);
        }
        
        br.close();
        isr.close();
        is.close();
    }
}

总结

到此这篇关于springboot读取resources下文件的文章就介绍到这了,更多相关springboot读取resources文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Java/Android 相关文章推荐
Spring boot应用启动后首次访问很慢的解决方案
Jun 23 Java/Android
SpringCloud的JPA连接PostgreSql的教程
Jun 26 Java/Android
使用springMVC所需要的pom配置
Sep 15 Java/Android
JVM的类加载器和双亲委派模式你了解吗
Mar 13 Java/Android
Java实现二分搜索树的示例代码
Mar 17 Java/Android
Java字符串逆序方法详情
Mar 21 Java/Android
Java中Quartz高可用定时任务快速入门
Apr 03 Java/Android
mapstruct的用法之qualifiedByName示例详解
Apr 06 Java/Android
Android Flutter实现3D动画效果示例详解
Apr 07 Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
Apr 24 Java/Android
java开发双人五子棋游戏
May 06 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 Java/Android
java实现自定义时钟并实现走时功能
Jun 21 #Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
Jun 21 #Java/Android
Android基础入门之dataBinding的简单使用教程
Jun 21 #Java/Android
一文搞懂Java中的注解和反射
Jun 21 #Java/Android
Android学习之BottomSheetDialog组件的使用
Jun 21 #Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
Jun 21 #Java/Android
Mybatis-plus配置分页插件返回统一结果集
You might like
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
2014/12/25 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
Nodejs中的require函数的具体使用方法
2019/04/02 NodeJs
一篇文章介绍redux、react-redux、redux-saga总结
2019/05/23 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
import的本质解析
2017/10/30 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
工商管理系学生的自我评价分享
2013/11/29 职场文书
班主任经验交流材料
2014/12/16 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers
MongoDB使用场景总结
2022/02/24 MongoDB
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android
DSP接收机前端设想
2022/04/05 无线电