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 相关文章推荐
详解Java实践之建造者模式
Jun 18 Java/Android
详解SpringBoot异常处理流程及原理
Jun 21 Java/Android
Java如何实现树的同构?
Jun 22 Java/Android
Java并发编程之详解CyclicBarrier线程同步
Jun 23 Java/Android
Java数组与堆栈相关知识总结
Jun 29 Java/Android
springboot临时文件存储目录配置方式
Jul 01 Java/Android
关于springboot配置druid数据源不生效问题(踩坑记)
Sep 25 Java/Android
剑指Offer之Java算法习题精讲二叉树专项训练
Mar 21 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 Java/Android
Spring中bean集合注入的方法详解
Jul 07 Java/Android
Java实现贪吃蛇游戏的示例代码
Sep 23 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
浅谈thinkphp的实例化模型
2015/01/04 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
2016/06/29 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
2018/11/06 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
微信小程序生成二维码的示例代码
2019/03/29 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
python修改注册表终止360进程实例
2014/10/13 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
python调用动态链接库的基本过程详解
2019/06/19 Python
基于python图像处理API的使用示例
2020/04/03 Python
html5使用canvas画三角形
2014/12/15 HTML / CSS
编写strcpy函数
2014/06/24 面试题
什么是lambda函数
2013/09/17 面试题
爱心活动计划书
2014/04/26 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
三年级学生评语大全
2014/12/26 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
自考生自我评价
2019/06/21 职场文书
Java基础-封装和继承
2021/07/02 Java/Android
Nginx配置文件详解以及优化建议指南
2021/09/15 Servers
Python中如何处理常见报错
2022/01/18 Python
如何使用python包中的sched事件调度器
2022/04/30 Python
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS