java - 未知异常? java.nio.file.FileSystemException : Invalid exchange

标签 java

我遇到了以前从未见过的错误,并且找不到任何相关信息。

如果我尝试遍历一个(几个嵌套子目录中的大型文件/100 万个文件。每个目录只有 1-300 个文件/文件夹)文件路径,我会得到以下堆栈跟踪

Exception in thread "main" java.io.UncheckedIOException: java.nio.file.FileSystemException: /PATH_HERE/: Invalid exchange
    at java.nio.file.FileTreeIterator.fetchNextIfNeeded(FileTreeIterator.java:88)
    at java.nio.file.FileTreeIterator.hasNext(FileTreeIterator.java:104)
    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.ReferencePipeline.collect(ReferencePipeline.java:499)
    at my.class.NGram.run(NGram.java:90)
    at my.class.NGram.main(NGram.java:81)
Caused by: java.nio.file.FileSystemException: /PATH_HERE: Invalid exchange
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
    at sun.nio.fs.UnixException.asIOException(UnixException.java:111)
    at sun.nio.fs.UnixDirectoryStream$UnixDirectoryIterator.readNextEntry(UnixDirectoryStream.java:171)
    at sun.nio.fs.UnixDirectoryStream$UnixDirectoryIterator.hasNext(UnixDirectoryStream.java:201)
    at java.nio.file.FileTreeWalker.next(FileTreeWalker.java:348)
    at java.nio.file.FileTreeIterator.fetchNextIfNeeded(FileTreeIterator.java:84)
    ... 10 more

第 90 行的代码如下所示

ConcurrentLinkedQueue<File> queuOfAllFiles = new ConcurrentLinkedQueue<>();
    FileVisitor<? super Path> fileVisitor = new SimpleFileVisitor<Path>()
    {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
        {
            if (attrs != null && file != null && attrs.isRegularFile())
                queuOfAllFiles.add(file.toFile());
            return super.visitFile(file, attrs);
        }

    };
    Files.walkFileTree(dir.toPath(), EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, fileVisitor); //This line errors

原始代码如下所示,会产生相同的错误

List<File> allFiles = Files.walk(dir.toPath(), FileVisitOption.FOLLOW_LINKS)
            .filter(p -> !Files.isReadable(p))
            .map(p -> p.toFile())
            .collect(Collectors.toList());

我似乎无法在任何地方找到有关此错误的任何信息,或者可能导致该错误的原因。触摸/查看系统上所有文件的工具似乎运行没有问题,例如

find /PATH_HERE -type f | wc -l

给我正确的文件数量(大约 100 万个)

它在具有 40 TB SSD 存储、64 个 CPU 核心和 2 TB RAM 且运行 Ubuntu 16.04 的系统上运行。 Java 版本信息如下。

java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

我正在寻找任何可能导致此问题或其他问题的帮助。我现在没有任何想法,也找不到任何信息。

最佳答案

您必须遵循符号链接(symbolic link)吗?可能是一个潜在的麻烦点。 另外,您是否尝试过使用自己的递归函数遍历树?您也许能够找到特定的有问题的文件/目录。

关于java - 未知异常? java.nio.file.FileSystemException : Invalid exchange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47601925/

相关文章:

java - 什么是时间复杂度 O(1) 次,Java 中的 O(n) 次

java - 强大的任务调度程序,可在失败时重新启动任务

java - VisualVM - 无法采样 CPU/内存

java - 神经网络编程,寻找一个好的简单的游戏来训练网络

java - 使用 Apache POI 进行低内存写入/读取

java - 对齐不同DesignGridLayout的标签列

java - 将java对象转换为动态xml

java - Spring MVC Controller 中的 JSON 参数

java - 当@JacksonXmlProperty.localName 匹配@JacksonXmlRootElement.localName 时无法反序列化展开的列表

java - 该程序的 if else 语句有什么问题?