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 26 Java/Android
JavaGUI模仿QQ聊天功能完整版
Jul 04 Java/Android
看完这篇文章获得一些java if优化技巧
Jul 15 Java/Android
Java SSM配置文件案例详解
Aug 30 Java/Android
Java8中接口的新特性使用指南
Nov 01 Java/Android
Java9新特性对HTTP2协议支持与非阻塞HTTP API
Mar 16 Java/Android
Android基于Fresco实现圆角和圆形图片
Apr 01 Java/Android
Java 深入探究讲解简单工厂模式
Apr 07 Java/Android
带你了解Java中的ForkJoin
Apr 28 Java/Android
Java死锁的排查
May 11 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
Jun 21 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
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
2015/12/25 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
FF IE兼容性的修改小结
2009/09/02 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
javascript解析json实例详解
2014/11/05 Javascript
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
详解Swift中属性的声明与作用
2016/06/30 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
python配置grpc环境
2019/01/01 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
上海某公司.net方向笔试题
2014/09/14 面试题
单位创先争优活动方案
2014/01/26 职场文书
2014年道德讲堂实施方案
2014/03/05 职场文书
2014年文员工作总结
2014/11/18 职场文书
2014年班组长工作总结
2014/11/20 职场文书
慰问信模板
2015/02/14 职场文书
2015学校图书管理员工作总结
2015/05/11 职场文书
仓库管理制度范本
2015/08/04 职场文书
利用Redis实现点赞功能的示例代码
2022/06/28 Redis