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异常的问题得以解决。

相关推荐
Lhappy嘻嘻3 小时前
Java IO|File 文件操作 + 字节流 / 字符流完整笔记 + 递归删除文件实战
java·笔记·php
Championship.23.243 小时前
Linux 3.0 锁机制与故障排查详解
linux·运维·服务器
伊玛目的门徒3 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
天疆说3 小时前
Zotero Connector 在 Edge 里找不到桌面 Zotero(Linux / Zotero 9.0.6 / Edge 150)
linux·前端·edge
风123456789~5 小时前
【Linux专栏】ls 排除某个文件
linux·运维·服务器
IT曙光5 小时前
ubuntu apt-get离线源制作
linux·ubuntu
其实防守也摸鱼6 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
懒鸟一枚6 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
Darkwanderor7 小时前
对Linux的进程控制的研究
linux·运维·c++
我命由我123457 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime