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 讀取文件緩存內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 詳解IDEA中類加載器調用getResourceAsStream()方法需註意的問題
- SpringBoot讀取Resource下文件的4種方法
- SpringBoot如何獲取src/main/resource路徑下的文件
- Java 將Excel轉為OFD格式(方法步驟)
- Java實現Excel文件加密解密的示例代碼