一、問題描述:
一個項目中為了生成樹狀目錄,調用了file.listFiles()方法,然后利用file.isDirectory()方法判斷是否為目錄,該程序在windows下運行無問題,在Linux下中文文件夾用該方法判斷會失敗,具體表現為:isFile()---false; isDirectory()---false;
查閱資料,很多網帖說是Linux下無法使用isDirectory()進行判斷,但是沒有解決方案。
另一方面,程序中顯示的文件名為亂碼。所以考慮是不是Linux系統的編碼問題導致無法正確讀取。也有人說java的默認字符集是zh_CN.GB3212,而Linux的默認字符集是zh_CN.UTF-8,查看了一下/etc/sysconfig/i18n,果然是。
於是修改了Linux的默認字符集,上述問題得以解決,中文文件夾isDirectory()判斷無問題,文件名亂碼也得以解決。
二、解決方案:
修改Linux下的默認字符集步驟:
vi /etc/profile
export LC_ALL="zh_CN.GB2312"
export LANG="zh_CN.GB2312"
vi /etc/sysconfig/i18n
#LANG="zh_CN.UTF-8"
#SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
#SYSFONT="latarcyrheb-sun16"
LANG="zh_CN.GB2312"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"
#使上述修改生效
source /etc/profile
source /etc/sysconfig/i18n
進行修改是要注意大小寫,由於我在寫的時候把zh_CN.GB2312寫成了zh_CN.GB3212,出現以下錯誤:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (zh_CN.GB3212): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (zh_CN.GB3212): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (zh_CN.GB3212): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (zh_CN.GB3212): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (zh_CN.GB3212): No such file or directory
修改完畢后,重啟tomcat,問題解決。
