java.nio.file.InvalidPathException异常

一.问题概述

本人在ubuntu22.04的操作系统上,运行java程序时创建一个文件时,由于文件名称中包含了中文,所以导致了程序抛出了java.nio.file.InvalidPathException的异常。

bash 复制代码
java.nio.file.InvalidPathException: Malformed input or input contains unmappable characters: 样例-1.txt
	at 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.替换镜像源

bash 复制代码
sed -i 's/mirrors.cloud.aliyuncs.com/mirrors.aliyun.com/g' /etc/apt/sources.list

可以将ubuntu22.04操作系统的镜像源更换为阿里云ECS镜像源,这样方便下载和安装软件。

2.清理软件包缓存

bash 复制代码
apt-get clean

3.更新软件包索引

bash 复制代码
apt-get update

4.安装locales

bash 复制代码
apt-get install -y locales

5.指定语言环境

bash 复制代码
locale-gen en_US.UTF-8

6.指定文件编码启动JVM

bash 复制代码
java -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -jar xxx.jar 

通过以上6个步骤的处理,然后重启ubuntu22.04操作系统,最后程序在创建中文名称的文件成功,InvalidPathException异常的问题得以解决。

相关推荐
lThE ANDE7 分钟前
最完整版Linux安装Redis(保姆教程)
linux·运维·redis
不吃香菜学java3 小时前
Redis的java客户端
java·开发语言·spring boot·redis·缓存
captain3763 小时前
事务___
java·数据库·mysql
北漂Zachary3 小时前
四大编程语言终极对比
android·java·php·laravel
小江的记录本3 小时前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
郝亚军3 小时前
ubuntu通过samba,让win11可以访问其共享文件夹
linux·服务器·ubuntu
一个人旅程~4 小时前
旧电脑的“拯救者”?Linux Mint20.3是怎样适配软件硬件以及兼顾兼容与性能的平衡的?
linux·经验分享·电脑
小夏子_riotous4 小时前
Docker学习路径——3、常用命令
linux·运维·服务器·学习·docker·容器·centos
嗑嗑嗑瓜子的猫4 小时前
Java!它值得!
java·开发语言
其实防守也摸鱼5 小时前
无线网络安全---WLAN相关安全工具--kali(理论附题目)
linux·安全·web安全·学习笔记·kali·命令模式·wlan