Почему Java не может прочитать некоторые каталоги, содержащие символы utf-8? - PullRequest
0 голосов
/ 20 сентября 2018

В настоящее время я тестирую, как Java обрабатывает каталоги, содержащие символы utf-8.Для этого я создал папку, содержащую 10.000 папок со случайными именами, например: 0dgý lEEóæ2êOðuKõþþÞbA.

Я проверил, что в терминале существует 10.000 папок:

/folder_test$ find ./* -maxdepth 1 -type d | wc -l
10000

Мой код Java выглядитвот так:

File[] listFiles = path.toFile().listFiles();
System.out.println(listFiles.length);
for (File file : listFiles) {
    System.out.println(file);
}
try {
    System.out.println(Files.list(path).count());
} catch (IOException ex) {
    ex.printStackTrace();
}

listFiles.length говорит мне, что в нем всего 7289 элементов.

Сбой строк Files.list(path).count() со следующим исключением:

java.nio.file.FileSystemException: /folder_test: {d��
    at java.nio.file.Files$2.hasNext(Files.java:3462)
    at java.util.Iterator.forEachRemaining(Iterator.java:115)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.LongPipeline.reduce(LongPipeline.java:438)
    at java.util.stream.LongPipeline.sum(LongPipeline.java:396)
    at java.util.stream.ReferencePipeline.count(ReferencePipeline.java:526)
        ........

Locale.getDefault() - это en_US, а CharSet.defaultCharset() - это UTF-8.

Почему Java терпит неудачу, в то время как bash и мой файловый менеджер, кажется, справляются с каталогами просто отлично?

...