繁体   English   中英

当文件路径包含Linux中的中文单词时,如何检查Java中是否存在文件?

[英]How do I check if a file exists in Java when the file path contains chinese words in Linux?

当文件路径为全英文或中文时,我运行代码很好,但是当我的文件路径有中文和英文时,代码结果为false。在我的window系统中,我尝试对文件路径进行编码,它运行良好。但是当我尝试在Linux系统中部署时,返回false,文件路径为:/home/file/GPRS内核.zip。 如何修复我的代码?

//the first version
new File(fileName).exists()
//the second version
new File(new String(fullFileName.
            getBytes(StandardCharsets.ISO_8859_1))).exists()
//the third version:return true in window and return false in linux
new File(new String(fullFileName.
            getBytes(StandardCharsets.UTF_8))).exists()

linux 编码在这里:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

我没有中文系统,所以无法重现这种行为。

但是我知道如果您运行为中文配置的 Windows,您的文件系统应该支持 unicode 文件名。 Java 本身支持 Unicode,因为它在 UFT16 上运行。 您描述的问题根本不应该发生。

因此,我坚信您是通过在其间放置 ISO_8859_1 编码来引入问题的。 删除那些东西,你应该很好。

通常不要使用 getBytes() - 字符不是字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM