【发布时间】:2013-06-02 19:52:13
【问题描述】:
我有一个文件,其名称不仅包含纯 ASCII 字符集的字符,还包含非 ASCII 字符集的字符。在我的例子中,它包含西里尔字符。
这是我的代码的 sn-p:
String fileName = "/Users/dnelepov/Downloads/тест изображение.png";
File sendFile = new File(fileName);
if (sendFile.exists()) {
// Some code
}
sendFile.exists if 块中的代码没有被执行。
为什么文件无法识别?
我的系统配置 语言环境
LANG="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_CTYPE="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_ALL="ru_RU.UTF-8"
uname -a
Darwin Dmitrys-MacBook-Pro.local 11.4.2 Darwin Kernel Version 11.4.2: Thu Aug 23 16:25:48 PDT 2012; root:xnu-1699.32.7~1/RELEASE_X86_64 x86_64
java -version
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b12)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)
更新
我发现这个错误是在 Oracle 的 JDK 上。
我在 Eclipse 上创建了项目,并且找到了文件。我检查了项目属性,发现 Mac OS 6 JDK。
然后我将其更改为 JDK 7,并且再次找不到文件。
我的问题是我需要将 JDK 7 与 JavaFX 一起使用。不是 Mac OS 版本。所以我的问题依然存在。
我制作了一个视频来显示这个错误 Video with error
更新 2
感谢 eumust 的回答,此代码有效:
Path path = Paths.get("/Users/dnelepov/Downloads/test/");
Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path oneF, BasicFileAttributes attrs) throws IOException {
System.out.println("FILE:" + oneF);
if (Files.exists(oneF)) {
System.out.println("EXISTS:" + oneF);
}
return FileVisitResult.CONTINUE;
}
});
【问题讨论】:
-
我认为这是 Mac OS X?
-
是的,我要死了:(
-
我不喜欢这些“�”符号。你检查过你的终端的编码[可能是,Mac OS X 中的终端默认使用 ISO 8859-5 吗?看看这里的流程图:habrahabr.ru/post/147843]?
-
您能否在终端中输入“locale”并向我们展示它的输出(只是为了确定)?
-
系统配置更新问题
标签: java macos filenotfoundexception cyrillic