java文件缓存服务器,Java代码读取文件缓存问题解决

本文介绍了在Java项目中遇到的文件读取缓存问题,详细描述了业务场景和实践过程中遇到的挑战。作者通过动态获取文件并转换为流的方式解决了线上下载模板文件仍为旧版的问题。解决方案包括更新文件路径,避免路径缓存。此外,还分享了如何在Java中读取并下载项目内文件的方法,并提供了自测代码。
摘要由CSDN通过智能技术生成

一、业务场景

最近遇到了一个Java文件读取的缓存问题,打远程断点出现的也是原来的老代码参数,好在晚上十点突然找到了解决方案,豁然开朗,现整理分享思路,希望对遇到同样文件读取缓存问题的你有帮助

1f679705e847bfd85fa0117c361c950b.png

我更新几次插件包后,服务器也缓存也清理了

a8b34a050761a65d138e8d3cbd7846d0.png

我本地用postman调用测试,下载的文件是新文件,但是上线后发现下载下来的文件是老文件

下载下来的文件还是原来的文件,文件大小28.5K,我动态写入部分数据,按道理下载下来的文件大小应该比这个大

4efe9c9e365704da8ab951d27534a7f1.png

业务场景: 我现在需要获取一个Java项目resource目录下的Excel文件,然后往此Excel文件的第二个sheet页动态插入部分数据

实践情况:我在如何获取此文件的相对路径情况下花费了很多的时间,原来定义了一个参数String path和String realpath打完包验证发现线下是好的,服务器不行,我将对应代码移除

更新后的方法:我使用新的方法动态获取当前文件,将此文件转换为流传入对应的对象;

问题: 本地测试可以动态的导出Excel文件,但是代码上线,下载下来的模板是老项目,远程断点出现原来老的定义的参数

来看看我远程断点的相关情况

我是读取一个文件转行成文件流然后放入指定的Workbook中(即读取一个已有Excel文件)

901b4a80b6c115660e98d4e653e47352.png

在这个读取的过程中我发现了如下这些属性:path,upload

99cba356a84c478f4076882a6cb69478.png

还有realpath以及返回为空的wb

d23683614b41188010e48da017202b87.png

这些属性我是我上午测试的时候定义的,但是此时已经不使用拼接路径的方式去构建workbook文件了,是将流放入workbook对象中构建文件

原来的解决思路: 我本地没问题,我就觉得是缓存的原因:

1、清理卸载插件重新安装

2、清理浏览器缓存,清理Tomcat缓存,重启Tomcat

3、都试过后还不行就重启reboot服务器

5e09812efbf6558889c87b8ec08ab3a0.png

但是不管我怎么操作,服务器依然走老代码,下载下来老的模板

二、解决方案

如何解决问题?

自己创建一个新的文件夹,将自己的文件xlsx文件放入其中,读取文件路径的地方更新成读取新的文件路径

如原来是

InputStream inputstream = this.getClass().getClassLoader().getResourceAsStream("hello/Test.xlsx");

现在创建一个新的文件夹,放入原文件如 word/Test.xlsx ,然后读取新的路径

InputStream inputstream = this.getClass().getClassLoader().getResourceAsStream("word/Test.xlsx");

打包再上线测试

反思:具体问题原因肯定是打包的时候文件被缓存到哪里了,没清理干净,更新一下新路径,走新的读取方式问题就解决了

总结:创建新的路径,走新的读取方式

三、文件读取

项目之前是静态下载模板的即前端静态的下载

window.location.href = url

此业务是先读取,再下载,如何读取自己Java项目中对应相对位置的文件呢 ?

InputStream inputstream = this.getClass().getClassLoader().getResourceAsStream("hello/Test.xlsx");

来我们验证一下我们是否读取了

e507d3d2c7e575e15061394e5e080902.png

如果换一个不存在的路径或者文件名,效果如下

ec6fe2eb7f8715e0ee073eb8201e5da3.png

如上即我们成功读取到了此文件

自测代码如下

public class TestPath {

InputStream getFileStream(){

InputStream inputstream = this.getClass().getClassLoader().getResourceAsStream("helloWord/Test.xlsx");

return inputstream;

}

public static void main(String[] args) {

TestPath stream = new TestPath();

System.out.println( stream.getFileStream());

}

}

接下来也会整理一下Java读取文件以及导入导出Excel表格相关问题,欢迎同步沟通学习交流!

到此这篇关于Java代码读取文件缓存问题解决的文章就介绍到这了,更多相关Java 读取文件缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值