一.問題概述
? ? ? ? 本人在ubuntu22.04的操作系統上,運行java程序時創建一個文件時,由于文件名稱中包含了中文,所以導致了程序拋出了java.nio.file.InvalidPathException的異常。
java.nio.file.InvalidPathException: Malformed input or input contains unmappable characters: 樣例-1.txtat java.base/sun.nio.fs.UnixPath.encode(UnixPath.java:121)at java.base/sun.nio.fs.UnixPath.<init>(UnixPath.java:68)at java.base/sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:279)at java.base/java.nio.file.Path.resolve(Path.java:515)
二.問題分析
? ? ? ? 在本地的windows環境中調試程序來跟蹤錯誤時,卻發現本地的程序創建含有中文名稱的文件是可以成功的。所以初步判斷應該是ubuntu22.04的操作系統字符編碼的問題。而且ubuntu22.04的操作系統會有bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)的提示信息。
三.解決方案
1.替換鏡像源
sed -i 's/mirrors.cloud.aliyuncs.com/mirrors.aliyun.com/g' /etc/apt/sources.list
可以將ubuntu22.04操作系統的鏡像源更換為阿里云ECS鏡像源,這樣方便下載和安裝軟件。
2.清理軟件包緩存
apt-get clean
3.更新軟件包索引
apt-get update
4.安裝locales
apt-get install -y locales
5.指定語言環境
locale-gen en_US.UTF-8
6.指定文件編碼啟動JVM
java -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -jar xxx.jar
? ? ? ? 通過以上6個步驟的處理,然后重啟ubuntu22.04操作系統,最后程序在創建中文名稱的文件成功,InvalidPathException異常的問題得以解決。