解決Linux中文名檔案下載找不到路徑(java.io.FileNotFoundException: ***(No such file or directory))
阿新 • • 發佈:2018-12-18
問題描述
以前寫過一個檔案上傳下載的專案,在本地測試沒有問題,但最近在部署到Linux伺服器實際應用發現,當檔名為中文時,會報java.io.FileNotFoundException: ***(No such file or directory
的異常,檔案下載後是一個空檔案
查閱資料發現,專案本身沒有問題,問題出在本地主機(我的是Windows10)和Linux作業系統的編碼不同
具體的檔案上傳下載實現可以看我的另外一篇部落格,有原始碼
Java實現帶表單引數的檔案上傳、下載和檔案打包下載
工具
Linux圖形化工具為Xftp,Shell工具為Xshell IDE:IDEA
說明
我是通過Xftp直接將要下載的檔案上傳到指定的Linux檔案目錄
解決問題
1. 檢視檔名
這裡有一個坑,由於我是通過Xftp直接將要下載的檔案上傳到指定的Linux檔案目錄,所以在Xftp上看中文名檔案是正常的 再通過Xshell來看 這裡就可以看出問題了,在Shell工具裡中文名不能正常顯示,所以肯定找不到檔案 這時就需要將中文檔案用Linux的編碼格式進行編碼
2. 解決問題
2.1 檢查Linux是否安裝convmv工具
rpm -qa |grep convmv
如圖說明安裝的有,若沒有,使用如下命令進行安裝
yum -y install convmv
或
yum install convmv //此命令需要手動確認
2.2 轉換檔名格式
convmv -f gbk -t utf8 -r --notest +檔案路徑/檔名 eg:convmv -f gbk -t utf8 -r --notest /test/*.docx
由於中文名不能夠正常顯示,所以通過檔案字尾來指定要進行編碼的檔案 編碼完成,這時再看檔名 可以看到中文名已經能夠正常顯示了,這是檔案就能夠正常下載了 注意:雖然在Shell下正常顯示,但這時通過Xftp工具檢視中文名卻不能正常顯示了 這應該是Xftp編碼顯示的問題,不過不影響專案的執行
總結
到此,Linux中文名檔案下載找不到路徑的問題就解決了,希望我的文章對你有所幫助