为什么Java无法读取某些包含utf-8字符的目录?

时间:2018-09-20 00:28:59

标签: java utf-8 directory nio

我目前正在测试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和我的文件浏览器似乎能很好地处理目录的同时失败?

0 个答案:

没有答案