失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > SpringBoot项目打包成jar后读取包内文件报错问题解决方法

SpringBoot项目打包成jar后读取包内文件报错问题解决方法

时间:2018-10-13 11:13:48

相关推荐

SpringBoot项目打包成jar后读取包内文件报错问题解决方法

文章目录

问题描述解决办法

问题描述

Springboot项目在开发环境中,使用 ResourceUtils.getFile(“classpath:files/test.xlsx”) 能读取到文件,结果打包成jar后,读取报错了

InputStream stream = getClass().getClassLoader().getResourceAsStream("files/test.xlsx");File targetFile = new File("files/test.xlsx");FileUtils.copyInputStreamToFile(stream, targetFile);

java.io.FileNotFoundException: class path resource [files/test.xlsx] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/D:/chqiuu/chqiuu-test-1.0.0.jar!/BOOT-INF/classes!/files/test.xlsxat org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:217)at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:180)at com.chqiuu.utils.ExcelReadUtil.read(FileUtil.java:285)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:369)at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:312)at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:135)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:423)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1702)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:388)at org.springframework.boot.SpringApplication.run(SpringApplication.java:327)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1234)at com.sci.publisher.SciApplication.main(SciApplication.java:32)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)


解决办法

可以通过两种方式来解决:

// 第一种使用 ClassPathResource 读取文件ClassPathResource resource = new ClassPathResource("files/test.xlsx");File sourceFile = resource.getFile();InputStream fis = resource.getInputStream();// 第二种使用 getClassLoader()读取文件InputStream fis = ExcelReadUtil.class.getClassLoader().getResourceAsStream("files/test.xlsx")

如果觉得《SpringBoot项目打包成jar后读取包内文件报错问题解决方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。