解決Linux中文名文件下載找不到路徑(java.io.FileNotFoundException: ***(No such file or directory))

問題描述

以前寫過一個文件上傳下載的項目,在本地測試沒有問題,但最近在部署到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中文名文件下載找不到路徑的問題就解決了,希望我的文章對你有所幫助

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章