У меня есть файл, имя которого содержит символы не только из простого набора символов ASCII, но и из набора символов, отличного от ASCII. В моем случае он содержит кириллические символы.
Вот фрагмент моего кода:
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)
UPDATE
Я обнаружил, что эта ошибка находится в JDK от Oracle.
Я создал проект на Eclipse, и файл был найден. Я проверил свойства проекта и нашел Mac OS 6 JDK.
Затем я меняю его на JDK 7, и файл снова не найден.
Моя проблема в том, что мне нужно использовать JDK 7 с JavaFX. Не версия для Mac OS. Поэтому моя проблема все еще существует.
Я сделал видео, чтобы показать эту ошибку Видео с ошибкой
ОБНОВЛЕНИЕ 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;
}
});