【Exception】java.io.FileNotFoundException SpringBoot项目打jar包运行,读取资源文件失败

读取资源文件失败!!!
在Windows平台开发过程中能正常运行,但是将SpringBoot项目打jar包运行就会报错,我们一起来看看究竟是什么导致的?

案发现场:

java.io.FileNotFoundException: class path resource [com/aden/modules/demo/mock/json/task_process.json] cannot be resolved to absolute file path because it does
not reside in the file system: jar:file:/E:/code/aden/adenx/adenx-fast/adenx-fast-web/target/adenx-fast-web-1.0.0-exec.jar!/BOOT-INF/lib/adenx-fast-manager-api-1.0.0.jar!/com/aden/modules/demo/mock/json/task_process.json
        at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:217)
        at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:180)
        at com.aden.modules.demo.mock.MockController.readJson(MockController.java:191)
        at com.aden.modules.demo.mock.MockController.taskProcess(MockController.java:173)
        at com.aden.modules.demo.mock.MockController$$FastClassBySpringCGLIB$$31542cbb.invoke(<generated>)

readJson方法源码:

private String readJson(String jsonSrc) {
	StringBuilderjson = new StringBuilder("");
	try {
		File file = ResourceUtils.getFile(jsonSrc);
		Path path = Paths.get(file.getPath());

		Files.lines(path)
				// 使用Stream很容易的过滤掉包含的空格
				.map(String::trim)
				.forEach(json::append);
		System.out.println(json.toString());
		System.out.println(json.toString().length());
	} catch (IOException e) {
		e.printStackTrace();
	}
	return json.toString();
}

解决方案:

采用读取流的方式访问文件:

ClassPathResource resource = new ClassPathResource("task_process.json");
InputStream inputStream = resource.getInputStream();

原因分析:

项目打成jar包后,资源文件也存在于jar包中,
文件的绝对路径是jar:file:/E:/code/aden/adenx/adenx-fast/adenx-fast-web/target/adenx-fast-web-1.0.0-exec.jar!/BOOT-INF/lib/adenx-fast-manager-api-1.0.0.jar!/com/aden/modules/demo/mock/json/task_process.json
但在运行过程中,spring是不允许直接访问jar包内的文件的,所以会报错。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值