首页 > 其他分享 >SpringBoot打成jar运行后无法读取resources里的文件

SpringBoot打成jar运行后无法读取resources里的文件

时间:2023-09-15 10:00:10浏览次数:41  
标签:文件 docx word SpringBoot 模版 jar resources

开发一个word替换功能时,因替换其中的内容功能需要 word 模版,就把 word_replace_tpl.docx 模版文件放到 resources 下

在开发环境中通过下面方法能读取word_replace_tpl.docx文件,但是打成jar包在 linux下运行后无法找到文件了

File  file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "static/office_template/xxx.docx");

在开发环境运行时,会把资源文件编译到 项目\target\classes\static\office_template\xxx.docx 目录下,但是打包成jar后,
Resource下的文件是存在于jar这个文件里面,在磁盘上是没有真实路径存在的,它是位于jar内部的一个路径。所以通过ResourceUtils.getFile或者this.getClass().getResource("")方法无法正确获取文件。

我们用压缩软件打开 jar 文件,看看该word模版位于jar内部的路径
image
怎么解决
1.把该模版文件放到jar项目外,在项目中配置该模版文件的绝对路径,不太推荐这种方式,可能会忘记配置模版
2.通过 ClassPathResource resource = new ClassPathResource(“static/office_template/word_replace_tpl.docx”);方式读取
用这种方式读取jar中的文件流

ClassPathResource resource = new ClassPathResource("static/office_template/word_replace_tpl.docx");
File sourceFile = resource.getFile();
InputStream fis = resource.getInputStream();

还要在项目pom.xml中配置resources情况

<build>
		<!-- 定义包含这些资源文件,能在jar包中获取这些文件 -->
		<resources>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
					<include>**/*.yml</include>
				</includes>
				<!--是否替换资源中的属性-->
				<filtering>false</filtering>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>**/*.*</include>
				</includes>
				<!--是否替换资源中的属性-->
				<filtering>false</filtering>
			</resource>
		</resources>
	</build>

标签:文件,docx,word,SpringBoot,模版,jar,resources
From: https://www.cnblogs.com/cgy1995/p/17704194.html

相关文章

  • springboot整合rocketMQ——消费者
    依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/......
  • 基于springboot学院宿舍管理系统-计算机毕业设计源码+LW文档
    摘要随着信息技术的发展,管理系统越来越成熟,各种企事业单位使用各种类型的管理系统来提高工作效率,从而降低手工劳动的弊端。我国政府一直以来都非常重视教育事业的发展,随着学生人数增加,学校对宿舍学生信息管理也变的困难。因此,高校提出通过开发宿舍管理系统来优化管理方案,对宿舍信......
  • 基于springboot与mybatis的健身器材批发管理系统的设计与实现
    研究的背景意义随着互联网技术的发展,各种类型的管理系统深入到人们的工作学习中,不再是最初的资料查询、在线沟通等简单形式的应用。各种统计分析、物联网、人工智能、AI等技术越来越多,特别典型的就是网上商城。电子商城也分为多种类型,包括B2B、B2C、C2C等。还有我们常见的批发商城......
  • SpringBoot 3.0最低版本要求的JDK 17,这几个新特性不能不知道
    最近,有很多人在传说SpringBoot要出3.0的版本了,并且宣布不再支持Java8,最低要求是Java17了。其实,早在2021年9月份,关于SpringFramework6.0的消息出来的时候,Spring官方就已经明确了不会向下兼容,最低的JDK版本是JDK17。2022年,SpringFramework6.0和SpringBoot3.0都......
  • SpringBoot中@ConfigurationProperties和@PropertySource的区别
    @ConfigurationProperties用于将主配置文件(application.properties或者“application.yml”)中的属性,映射到实体类中对应的属性。意思就是把主配置文件中配置属性设置到对应的Bean属性上。只需要写明prefix,如下,prefix是sever,就会自动将application文件中以sever开头的配置一一注......
  • springboot智能3D人体导医系统源码
    智能3D人体导医系统源码医院智能导诊系统是在医疗中使用的引导患者自助就诊挂号,在就诊的过程中有许多患者不知道需要挂什么号,要看什么病,通过智能导诊系统,可输入自身疾病的症状表现,或选择身体部位,在经由智慧导诊系统多维度计算,精准推荐科室,引导患者挂号就诊,实现科学就诊,不再担心挂......
  • SpringBoot单体用户登录校验
    一、概述要做一个有私有空间的单体的SpringBoot项目,用户的权限校验是必须得。需要指定哪些接口需要权限才能访问,哪些接口不需要权限就能访问。目标:1.用户登录、注册不需要权限校验,获取用户信息需要权限校验2.获取用户信息通过token来获取(从token中取......
  • springboot集成CAS客户端实现单点登录
    pom中引入依赖<!--cas--><dependency><groupId>org.jasig.cas.client</groupId><artifactId>cas-client-core</artifactId><version>3.6.2</version></dependen......
  • springboot 整合 nacos 实现配置文件统一管理 和 服务注册
    1.我使用的是 nacos-server-1.4.1 直接启动nacos没有配置数据库那些.\startup.cmd-mstandalone2.启动后在nacos中创建命名空间配置文件 注意命名空间的id我是自己定义的还有group到时候配置错了服务又不会报错只是会读取不到3.springboot配置 server-addr......
  • Springboot RocketMQ整合—官方原版
    Doker 技术人自己的数码品牌Doker官网:Doker多克一、添加maven依赖:<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>${RELEASE.VERSION}</version></dependen......