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

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: java.io.filenotfoundexception: openfailed: enoent (no such file or directory)是Java程序中常见的异常之一,表示在指定路径或目录下不到文件文件夹。 通常这种异常会在程序尝试打开一个文件时发生,可能是因为路径错误,文件不存在或者没有权限等原因导致。解决该异常的方法是检查程序中读取或写入文件路径是否正确,确认文件是否存在,以及确保程序有足够的权限访问目标文件。 在处理该异常时,可以使用Java的异常处理机制来捕获该异常并给出相应的提示信息,如未文件或目录,请检查路径是否正确、文件是否存在、是否有权限等。同时,对于无法处理的情况,可以通过向用户显示错误消息或记录日志来提醒用户或开发者。 总之,遇到java.io.filenotfoundexception: openfailed: enoent (no such file or directory)异常时,一定不要惊慌,需要对代码进行仔细检查,出问题所在,最终通过适当的处理方法来解决问题。 ### 回答2: 这个错误提示是Java编程中常见的IO异常之一。它产生的原因是程序尝试打开一个不存在的文件文件夹。 当程序运行时,它会尝试打开一个指定的文件文件夹。如果这个文件文件夹不存在,那么Java就会抛出这个异常。通常这个错误提示会指示程序在执行open方法时出错,因为不到指定的文件文件夹。 如果你遇到了这个问题,首先要检查的是你的文件路径是否正确。你应该确保你指定的路径是一个存在的文件文件夹。如果这个路径确实存在,那么你还需要检查该路径是否可读,是否被占用等等。 此外,这个错误提示也可能是由于文件权限的问题所致。如果你正在尝试读取或写入一个文件,但是你没有足够的权限来访问它,那么Java就会抛出这个异常。 总之,要解决这个问题,你需要仔细检查你的代码,确保文件路径正确并且你有足够的权限来访问它。如果问题仍未解决,你可能需要查看更多的异常信息来确定具体的原因。 ### 回答3: Java是一种运行于虚拟机上的编程语言。Java提供了一套完整的API,包括操作文件系统的API。在Java程序中,当我们想要打开一个文件时,会出现如下提示:java.io.filenotfoundexception: openfailed: enoent (no such file or directory)。 该异常表示在尝试打开该文件之前,Java到指定的文件或目录。通常情况下,这种错误会由于路径错误或文件名输入错误而引起。解决这个问题的方法如下: 1. 检查文件路径是否正确: 当我们向打开文件时,指定的文件路径必须是正确的。如果文件路径不正确,则会出现java.io.filenotfoundexception异常。因此,我们需要确保路径是指向正确的文件或目录。 2. 检查文件名是否正确: 文件名可能会输入错误,例如,大小写可能会错误地输入或者忘记输入扩展名。在这种情况下,我们需要检查文件名是否正确,并且输入的大小写是否符合实际情况。 3. 检查文件是否存在: 在尝试打开文件之前,我们需要确保该文件真正存在。因此,我们需要检查该文件是否存在,如果不存在,则需要创建新文件或引发NoSuchFileException异常。 总之,当我们在Java程序中打开文件时,如果出现java.io.filenotfoundexception: openfailed: enoent (no such file or directory)异常,我们需要首先检查路径文件名是否正确,并且确保文件真实存在。如果以上三种方法无法解决问题,我们需要检查文件系统中的权限问题,或者文件是否正在使用等其他问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值