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 Cache和EhCache实现缓存管理方式
Jun 15 Java/Android
分析Java中Map的遍历性能问题
Jun 26 Java/Android
浅谈Java父子类加载顺序
Aug 04 Java/Android
Java移除无效括号的方法实现
Aug 07 Java/Android
java多态注意项小结
Oct 16 Java/Android
JavaWeb实现显示mysql数据库数据
Mar 19 Java/Android
Java 获取Word中所有的插入和删除修订的方法
Apr 06 Java/Android
零基础学java之循环语句的使用
Apr 10 Java/Android
java高级用法JNA强大的Memory和Pointer
Apr 19 Java/Android
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
Jun 01 Java/Android
Spring中的@Transactional的工作原理
Jun 05 Java/Android
Spring Boot实现文件上传下载
Aug 14 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 防注入函数(格式化数据)
2011/08/08 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
微信小程序 消息推送php服务器验证实例详解
2017/03/30 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
js技巧--转义符"\"的妙用
2007/01/09 Javascript
又一个图片自动缩小的JS代码
2007/03/10 Javascript
一起来写段JS drag拖动代码
2010/12/09 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
javascript模拟命名空间
2015/04/17 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
深入理解Javascript箭头函数中的this
2017/02/13 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
Python深入学习之特殊方法与多范式
2014/08/31 Python
python 写的一个爬虫程序源码
2016/02/28 Python
JSONLINT:python的json数据验证库实例解析
2017/11/28 Python
python删除文本中行数标签的方法
2018/05/31 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
会计系毕业生求职信
2014/05/28 职场文书
2015年材料员工作总结
2015/04/30 职场文书
费用申请报告范文
2015/05/15 职场文书
跳高加油稿
2015/07/21 职场文书
安全主题班会教案
2015/08/12 职场文书
Java 将PPT幻灯片转为HTML文件的实现思路
2021/06/11 Java/Android
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS