系统在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
分别试试
这个很可能是编码问题造成的。
就是系统环境编码和你这个软件的编码不统一,所以就找不到啦。
有这么一些处理方法:
系统安装中文字符集