溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何解決Java代碼讀取文件緩存的問(wèn)題

發(fā)布時(shí)間:2021-05-30 18:00:17 來(lái)源:億速云 閱讀:275 作者:小新 欄目:開(kāi)發(fā)技術(shù)

小編給大家分享一下如何解決Java代碼讀取文件緩存的問(wèn)題,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

一、業(yè)務(wù)場(chǎng)景

最近遇到了一個(gè)Java文件讀取的緩存問(wèn)題,打遠(yuǎn)程斷點(diǎn)出現(xiàn)的也是原來(lái)的老代碼參數(shù),好在晚上十點(diǎn)突然找到了解決方案,豁然開(kāi)朗,現(xiàn)整理分享思路,希望對(duì)遇到同樣文件讀取緩存問(wèn)題的你有幫助

如何解決Java代碼讀取文件緩存的問(wèn)題

我更新幾次插件包后,服務(wù)器也緩存也清理了

如何解決Java代碼讀取文件緩存的問(wèn)題

我本地用postman調(diào)用測(cè)試,下載的文件是新文件,但是上線后發(fā)現(xiàn)下載下來(lái)的文件是老文件

下載下來(lái)的文件還是原來(lái)的文件,文件大小28.5K,我動(dòng)態(tài)寫入部分?jǐn)?shù)據(jù),按道理下載下來(lái)的文件大小應(yīng)該比這個(gè)大

如何解決Java代碼讀取文件緩存的問(wèn)題

業(yè)務(wù)場(chǎng)景: 我現(xiàn)在需要獲取一個(gè)Java項(xiàng)目resource目錄下的Excel文件,然后往此Excel文件的第二個(gè)sheet頁(yè)動(dòng)態(tài)插入部分?jǐn)?shù)據(jù)

實(shí)踐情況:我在如何獲取此文件的相對(duì)路徑情況下花費(fèi)了很多的時(shí)間,原來(lái)定義了一個(gè)參數(shù)String path和String realpath打完包驗(yàn)證發(fā)現(xiàn)線下是好的,服務(wù)器不行,我將對(duì)應(yīng)代碼移除

更新后的方法:我使用新的方法動(dòng)態(tài)獲取當(dāng)前文件,將此文件轉(zhuǎn)換為流傳入對(duì)應(yīng)的對(duì)象;

問(wèn)題: 本地測(cè)試可以動(dòng)態(tài)的導(dǎo)出Excel文件,但是代碼上線,下載下來(lái)的模板是老項(xiàng)目,遠(yuǎn)程斷點(diǎn)出現(xiàn)原來(lái)老的定義的參數(shù)

來(lái)看看我遠(yuǎn)程斷點(diǎn)的相關(guān)情況

我是讀取一個(gè)文件轉(zhuǎn)行成文件流然后放入指定的Workbook中(即讀取一個(gè)已有Excel文件)

如何解決Java代碼讀取文件緩存的問(wèn)題

在這個(gè)讀取的過(guò)程中我發(fā)現(xiàn)了如下這些屬性:path,upload

如何解決Java代碼讀取文件緩存的問(wèn)題

還有realpath以及返回為空的wb

如何解決Java代碼讀取文件緩存的問(wèn)題

這些屬性我是我上午測(cè)試的時(shí)候定義的,但是此時(shí)已經(jīng)不使用拼接路徑的方式去構(gòu)建workbook文件了,是將流放入workbook對(duì)象中構(gòu)建文件

原來(lái)的解決思路: 我本地沒(méi)問(wèn)題,我就覺(jué)得是緩存的原因:
1、清理卸載插件重新安裝
2、清理瀏覽器緩存,清理Tomcat緩存,重啟Tomcat
3、都試過(guò)后還不行就重啟reboot服務(wù)器

但是不管我怎么操作,服務(wù)器依然走老代碼,下載下來(lái)老的模板

二、解決方案

如何解決問(wèn)題?

自己創(chuàng)建一個(gè)新的文件夾,將自己的文件xlsx文件放入其中,讀取文件路徑的地方更新成讀取新的文件路徑

如原來(lái)是

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

現(xiàn)在創(chuàng)建一個(gè)新的文件夾,放入原文件如 word/Test.xlsx ,然后讀取新的路徑

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

打包再上線測(cè)試

反思:具體問(wèn)題原因肯定是打包的時(shí)候文件被緩存到哪里了,沒(méi)清理干凈,更新一下新路徑,走新的讀取方式問(wèn)題就解決了

總結(jié):創(chuàng)建新的路徑,走新的讀取方式

三、文件讀取

項(xiàng)目之前是靜態(tài)下載模板的即前端靜態(tài)的下載

window.location.href = url

此業(yè)務(wù)是先讀取,再下載,如何讀取自己Java項(xiàng)目中對(duì)應(yīng)相對(duì)位置的文件呢 ?

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

來(lái)我們驗(yàn)證一下我們是否讀取了

如何解決Java代碼讀取文件緩存的問(wèn)題

如果換一個(gè)不存在的路徑或者文件名,效果如下

如何解決Java代碼讀取文件緩存的問(wèn)題

如上即我們成功讀取到了此文件

自測(cè)代碼如下

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());
    }
}

接下來(lái)也會(huì)整理一下Java讀取文件以及導(dǎo)入導(dǎo)出Excel表格相關(guān)問(wèn)題,歡迎同步溝通學(xué)習(xí)交流!

看完了這篇文章,相信你對(duì)“如何解決Java代碼讀取文件緩存的問(wèn)題”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI