Java代码读取文件缓存问题解决

一、业务场景

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

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

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

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

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

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

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

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

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

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

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

还有realpath以及返回为空的wb

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

原来的解决思路: 我本地没问题,我就觉得是缓存的原因:
1、清理卸载插件重新安装
2、清理浏览器缓存,清理Tomcat缓存,重启Tomcat
3、都试过后还不行就重启reboot服务器

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

二、解决方案

如何解决问题?

自己创建一个新的文件夹,将自己的文件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");

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

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

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

自测代码如下

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 读取文件缓存内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java实现酷狗音乐临时缓存文件转换为MP3文件的方法

    本文实例讲述了java实现酷狗音乐临时缓存文件转换为MP3文件的方法.分享给大家供大家参考,具体如下: 酷狗临时缓存文件,其实已经是吧MP3文件下载好了,只是名字看上去好像是通过md5算法重命名的. 酷狗在缓存文件的时候会同时缓存歌词.这个程序就是根据md5管理对应的歌词文件和缓存文件,然后把缓存文件改成 歌曲名+.mp3格式. 原谅我取这么长也不知道对不对的类名. package com.zhou.run; import java.io.File; import java.util.HashM

  • Java代码读取文件缓存问题解决

    一.业务场景 最近遇到了一个Java文件读取的缓存问题,打远程断点出现的也是原来的老代码参数,好在晚上十点突然找到了解决方案,豁然开朗,现整理分享思路,希望对遇到同样文件读取缓存问题的你有帮助 我更新几次插件包后,服务器也缓存也清理了 我本地用postman调用测试,下载的文件是新文件,但是上线后发现下载下来的文件是老文件 下载下来的文件还是原来的文件,文件大小28.5K,我动态写入部分数据,按道理下载下来的文件大小应该比这个大 业务场景: 我现在需要获取一个Java项目resource目录下的

  • java io读取文件操作代码实例

    这篇文章主要介绍了java io读取文件操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主要分为字节读取和字符读取,字节读取可以一个一个读取和字节数组读取,字符读取同样之,字符读取适合文本读取,字节读取皆可以 这里直接上代码,读取文件的9个小demo package com.io; import org.junit.Test; import java.io.*; public class FileTest { //1.字节流字节一个

  • JAVA中读取文件(二进制,字符)内容的几种方法总结

    JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代码,需要的可以直接复制使用 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileName); In

  • Java在读取文件内容的时候,如何判断出空白行的操作

    一.问题描述: 在用Java读入文件内容时,往往文件中存在空行,有时候用空行来分割不同属性的内容,这个时候,就有必要把这个空行识别出来,在Java中该如何识别空行呢? 二.案例分析: 数据集为: 第一行信息:节点个数 开始节点 终止节点 第二行信息:空行 第三行到第四十四行信息:边及边的权值 第四十五行信息:空行 第四十六行到第四十七行信息:必过节点 第四十八行信息:空行 第四十九行到第五十行信息:必过边 第五十一行信息:空行 第五十二行到第五十三行信息:不能经过的边 18 S E S N1 3

  • Java递归读取文件例子_动力节点Java学院整理

    Java递归列出目录下全部文件 /** * 列出指定目录的全部内容 * */ import java.io.*; class Recursion{ public static void main(String[] args) { String fileName="D:"+File.separator; File f=new File(fileName); printFile(f); } public static void printFile(File f){ if(f!=null){

  • Java中读取文件转换为字符串的方法

    方式一 /** 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. 当然也是可以读字符串的. */ /* 貌似是说网络环境中比较复杂,每次传过来的字符是定长的,用这种方式?*/ public String readString1() { try { //FileInputStream 用于读取诸如图像数据之类的原始字节流.要读取字符流,请考虑使用 FileReader. FileInputStream inStream=this.openFileInput(FILE_NAME)

  • Java IO读取文件的实例详解

    Java中文件流的两个主要方式就是字符流和字节流,如下图: 具体的使用方法可以参考官方文档,这里主要介绍四种常见的文件读取方式 1.通过字节来读取文件(常用于二进制文件:图片.声音.视频等) 2.通过字符来读取文件(常用于文本的读取) 3.通过行来读取文件(常用于面向行的格式化文本读取) 4.随机读取文件(基于字节来读取) 下面是对于这四种读取方式的代码,如下: package com.ds.io; //1.按字节读取文件内容 //2.按字符读取文件内容 //3.按行读取文件内容 //4.随机读

  • Java8中使用一行代码读取文件

    JDK7中引入了新的文件操作类java.nio.file.File,它包含了很多有用的方法来操作文件,比如检查文件是否为隐藏文件,或者是检查文件是否为只读文件.开发者还可以使用Files.readAllBytes(Path)方法把整个文件读入内存,此方法返回一个字节数组,还可以把结果传递给String的构造器,以便创建字符串输出.此方法确保了当读入文件的所有字节内容时,文件属性是关闭的,否则就会出现IO异常或其它的未检查异常.这意味着在读文件到最后的块内容后,无需关闭文件. 要注意,此方法不适合

  • Java实现读取文件夹下(包括子目录)所有文件的文件名

    在编程的过程中,经常会用到对文件的读写操作等.比如,找出某一个文件夹下的所有文件名等. 下面的程序给出了,获取某一给定文件夹下所有文件的绝对路径的程序.可以作为某一个模块,在需要的时候直接使用. package src; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStrea

  • Java中实现文件上传下载的三种解决方案(推荐)

    java文件上传与文件下载是程序开发中比较常见的功能,下面通过本文给大家介绍Java中实现文件上传下载的三种解决方案,具体详情如下所示: 第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null; String fileAddre="/numUp"; try { InputStream stream = file.getInputStream(

随机推荐