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用自带的Image IO给图片添加水印
Jun 15 Java/Android
springcloud之Feign超时问题的解决
Jun 24 Java/Android
分析并发编程之LongAdder原理
Jun 29 Java/Android
Java基础之详解HashSet的使用方法
Jun 30 Java/Android
Java Spring 控制反转(IOC)容器详解
Oct 05 Java/Android
SpringBoot中HttpSessionListener的简单使用方式
Mar 17 Java/Android
JavaWeb实现显示mysql数据库数据
Mar 19 Java/Android
Java版 简易五子棋小游戏
May 04 Java/Android
Android实现图片九宫格
Jun 28 Java/Android
SpringBoot Http远程调用的方法
Aug 14 Java/Android
JDK8中String的intern()方法实例详细解读
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
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
1.PHP简介
2006/10/09 PHP
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
2015/11/09 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
Python单例模式实例分析
2015/01/14 Python
详解django中自定义标签和过滤器
2017/07/03 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
Python rstrip()方法实例详解
2018/11/11 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
2018/12/13 Python
详解Python正则表达式re模块
2019/03/19 Python
项目副经理岗位职责
2013/12/30 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
建筑工地标语
2014/06/18 职场文书
2014办公室副主任四风对照检查材料思想汇报
2014/09/20 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫
Python作用域和名称空间的详细介绍
2022/04/13 Python