??哈哈,之前計劃的每周至少更新一個博客的計劃又因為各種原因都泡湯了,看來堅持真得是一件挺讓人頭疼的問題,無論如何,從這周開始接下來每周一定要至少更新一個技術博客,歡迎大家監督!
??好,言歸正傳,之前前幾周遇到開發程序中遇到這樣一種這樣的問題,不知道大家有沒有遇到過,就是我在spring boot中使用mave將專案打包成jar包部署到linux服務器上后,當我運行一個介面時,居然報錯了,這里我貼出來給大家看下,如下圖所示:

??從上圖的報錯資訊可以看到,系統找不到json目錄下riskSchemeModelPackage.json這個檔案,我就納悶了,但是在我本地window系統下是可以的呀,我找到了該報錯資訊所對應的代碼,并貼到了下面,同時我也貼出了打包的類路徑圖,大伙們可以看下,
int riskSchemeModelPackageContentLength = cn.hutool.core.io.FileUtil.readUtf8String("classpath:json/riskSchemeModelPackage.json").getBytes(StandardCharsets.UTF_8).length * 2;

??從以上的代碼和圖片中大家都可以看到打包的類路徑的根目錄下是確確實實有這個目錄和檔案的,并且在本地windows系統運行是沒有任何問題的,到底是什么原因導致的呢?經過分析,應該是hutool包中FileUtil這個工具類有點問題,于是我果斷換了一種讀取方法的方法,如下面的代碼所示:
int riskSchemeModelPackageContentLength = IoUtil.readBytes(new FileInputStream(new ClassPathResource("json/riskSchemeModelPackage.json").getFile())).length * 2;
??我使用了new ClassPathResource()這種方式去專門讀取類路徑下的路徑,并使用getFile()獲取到riskSchemeModelPackage.json所對應的File物件,然后使用new FileInputStream()方法將File物件轉成檔案輸入流的形式,最后使用IoUtil工具類將其轉為byte(位元組),本來以為大功告成了,誰知當我重新部署到linux系統一運行,程式又給我拋出了空指標這個runtime exception,仔細一排查,原來是getFile()回傳的是null,所以才導致了這個空指標例外,那么又怎么解決呢?看來解決一個問題后還會產生一個新問題呀,無奈之下,谷歌一搜索看到還真有一些老哥遇到過這樣的坑,不過幸好這些老哥很給力,給出了一些不錯的解決方案,其中我找到了一個不錯的解決方案,那就是將讀取檔案改成讀取檔案流的形式,也就是將getFile()改成getInputStream(),于是我果斷就行了修改,如下代碼所示:
int riskSchemeModelPackageContentLength = IOUtils.toString(new ClassPathResource("json/riskSchemeModelPackage.json").getInputStream(), CharsetUtil.UTF_8).getBytes(StandardCharsets.UTF_8).length * 2;
??當我重新部署上去后再次運行了介面,沒想到居然可以了!!!終于功夫不負有心人,我把這個問題搞定了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/158199.html
標籤:其他
上一篇:Mybatis整合Spring(ssm整合待續)-day04
下一篇:Java入門學習筆記(十)——泛型和反射、常用泛型類、ArryList類、LinkedList類、Stack類、HashSet類、TreeSet類
