文件存在 但是却找不到

问题遇到的现象和发生背景

系统在Linux上部署,文件存在 但是却找不到,报错信息是:
java.io.FileNotFoundException: /opt/java/sharedfiles/[5039e977-a14a-4edf-ac90-6763bc9e1abb]营业执照.jpg
权限没问题,不带中文名的文件可以找到,目前确定到问题是文件名称包含中文字符的问题,在网上查了好多都是使用convmv这个命令,除了这种命令的方法,有什么其他的比如通过修改代码来解决的吗?或者是其他的方法吗?
.net的代码可以找到文件,java找不到

问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

没人会用中文作为文件名,很容易导致乱码而找不到,这是编程忌讳。

代码里找到保存文件的地方,修改文件名不带中文不行?

你的文件名称就是[5039e977-a14a-4edf-ac90-6763bc9e1abb]营业执照.jpg吗,你可以把读取文件的部分代码片段附一下,然后方便调试,或者你先参考下这篇文章
http://www.muzhuangnet.com/show/80743.html

linux服务器上文件名使用中文有时会乱码,尽量给上传的附件都起一个唯一标识符名,数据库将路径存起来,然后名称包含原始名就可以了,这样就不会出现你说的这种问题,我们的系统好多地方都牵涉到文件上传,一点问题都没有

文件名中不要中文

编码问题需要你程序和操作系统编码保持一致,找运维人员确认下操作系统编码。
正如楼上所说中文文件确实会有很多问题,不建议使用。

推测原因:
Linux系统默认UTF8编码
这个文件你是从Windows考过来的,文件名是GBK编码
(说得不对的话,你自己补充一下问题描述)

解决方法:
java启动参数增加 -Dfile.encoding=gbk ,让java程序默认取GBK编码

-Dfile.encoding=gbk
-Dfile.encoding=utf8
分别试试

这个很可能是编码问题造成的。
就是系统环境编码和你这个软件的编码不统一,所以就找不到啦。

有这么一些处理方法:

  1. 统一两种编码,此外注意一些特殊字符需要在文件名字符串中转义
  2. 如果是自己控制存储,建立数据库,把文件名(显示用的)作为一个字段存储,文件实体用标准化的命名办法处理为特殊文件名(比如除了扩展名的部分存储为获取日期、时间、和一个流水号或UUID号),并与前面文件名字段关联。

系统安装中文字符集