ClassPathResource resource = new ClassPathResource(publicKeyCer);
File file = null;
try {
file = resource.getFile();
} catch (IOException e) {
e.printStackTrace();
}
InputStream inStream = new FileInputStream( file.getPath());

一、需求场景
有时候我们需要在项目中使用一些静态资源文件,比如城市信息文件 countries.xml,在项目启动后读取其中的数据并初始化写进数据库中。

二、实现
静态资源文件 countries.xml 放在 src/main/resources 目录下

使用 Spring 的 ClassPathResource 来实现 :

Resource resource = new ClassPathResource("countries.xml");
File file = resource.getFile();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
1
2
3
ClassPathResource 类的注释如下:

Resource implementation for class path resources. Uses either a given ClassLoader or a given Class for loading resources.

Supports resolution as java.io.File if the class path resource resides in the file system, but not for resources in a JAR. Always supports resolution as URL.
1
2
3
翻译过来就是:

类路径资源的资源实现。使用给定的ClassLoader或给定的类来加载资源。

如果类路径资源驻留在文件系统中,则支持解析为 java.io.File,如果是JAR中的资源则不支持。始终支持解析为URL。
1
2
3
三、Jar 中资源文件
上面也提到了,如果静态资源文件在文件系统里,则支持解析为 java.io.File,程序是能正常工作的。

到项目打包成 Jar 包放到服务器上运行就报找不到资源的错误了!

解决法案是:不获取 java.io.File 对象,而是直接获取输入流:

Resource resource = new ClassPathResource("countries.xml");
BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()));
1
2
说明:构造得到 resource 对象之后直接获取其输入流 resource.getInputStream()。

四、附录
Spring Boot access static resources missing scr/main/resources
Classpath resource not found when running as jar

SpringBoot读取静态资源文件的更多相关文章

  1. springboot读取静态资源文件的方式

    springboot的请求路径一般会经过Controller处理,但是静态资源文件在请求之后是直接返回的.这涉及到俩个配置项. spring.mvc.static-path-pattern=/** s ...

  2. springboot下静态资源的处理(转)

    在SpringBoot中有默认的静态资源文件相关配置,需要通过如下源码跟踪: WebMvcAutoConfiguration-->configureResourceChain(method)-- ...

  3. springboot配置静态资源访问路径

    其实在springboot中静态资源的映射文件是在resources目录下的static文件夹,springboot推荐我们将静态资源放在static文件夹下,因为默认配置就是classpath:/s ...

  4. 解决springboot 配置文件未映射静态资源文件 导致shiro拦截静态资源的问题

    ---------------------------------------------------------------------------------------------------- ...

  5. SpringBoot静态资源文件

    1.默认静态资源映射 Spring Boot对静态资源映射提供了默认配置 Spring Boot默认将 /** 所有访问映射到一下目录 classpath:/static classpath:/pub ...

  6. SpringBoot - 搭建静态资源存储服务器

    目录 前言 环境 实现效果 具体实现 文件上传 配置类 上传接口 上传实现 辅助类 实体 上传测试 文件访问 配置类 项目源码 前言 记录下SpringBoot下静态资源存储服务器的搭建. 环境 wi ...

  7. Spring MVC程序中得到静态资源文件css,js,图片文件的路径问题总结

    上一篇 | 下一篇 Spring MVC程序中得到静态资源文件css,js,图片 文件的路径 问题总结 作者:轻舞肥羊 日期:2012-11-26 http://www.blogjava.net/fi ...

  8. SpringMVC+FreeMarker实现静态资源文件自动添加版本号(md5)

    近日切换java开发,开始学习springframework.在实现静态资源文件自动计算版本号的实例时,因为不熟悉框架,走了不少弯路,好在最终解决了问题.这里写篇文章记录一下实现,也希望对大家有些用处 ...

  9. SpringBoot 配置静态资源映射

    SpringBoot 配置静态资源映射 (嵌入式servlet容器)先决知识 request.getSession().getServletContext().getRealPath("/& ...

随机推荐

  1. Druid详细配置信息

    druid的配置项如下 配置 缺省值 说明 name   配置这个属性的意义在于,如果存在多个数据源,监控的时候 可以通过名字来区分开来.如果没有配置,将会生成一个名字, 格式是:"Data ...

  2. mybatis insert 自动生成key

    <selectKey keyProperty="id" resultType="java.lang.String" order="BEFORE& ...

  3. O_DIRECT方式读取文件示例

    #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h& ...

  4. 从Entity Framework的实现方式来看DDD中的repository仓储模式运用

    一:最普通的数据库操作 static void Main(string[] args) { using (SchoolDBEntities db = new SchoolDBEntities()) { ...

  5. Android-读取操作系统通话记录并/拨打电话/发送短信/复制号码到拨号盘

    apps目录的contacts应用(有读取通话记录功能),是访问provider目录的provider.contacts应用(有暴露通话记录),所以要阅读Android操作系统源码-->pack ...

  6. PMBOK项目管理PMI主义\IPMA概述

    PMP(Project Management Professional)指项目管理专业人士资格认证,是美国项目管理协会(Project Management Institute,PMI)在全球180多 ...

  7. 系统数据库--修改tempdb的位置

    use mastergoAlter database tempdb modify file (name = tempdev, filename = 'G:\db\tempdb.mdf')goAlter ...

  8. ASP.NET MVC实现一个用户只能登录一次 单用户登录

    现在许多网站都要求登录后才能进行进一步的操作,当不允许多用户同时登录一个帐号时,就需要一种机制,当再登录一个相同的帐号时,前面登录的人被挤下线,或者禁止后面的人登录.这里实现的是前一种功能. 网上有许 ...

  9. vector在一个循环里同时删除插入

    vector<int> a; a.push_back(10); a.push_back(20); a.push_back(30); a.push_back(40); a.push_back ...

  10. jQuery阻止默认行为

      <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF- ...