解决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中文名文件下载找不到路径的问题就解决了,希望我的文章对你有所帮助

发布了17 篇原创文章 · 获赞 23 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/SWPU_Lipan/article/details/83511144