Java文件I/O在程序运行一段时间后似乎停止工作-没有错误

Java文件I/O在程序运行一段时间后似乎停止工作-没有错误,java,windows,Java,Windows,我尝试了File.listFiles()和Guava的Files.fileTreeTraverser().BroadthFirstTraversal(dir) 在这两种情况下,程序运行一段时间后(每秒运行两次此特定代码),匹配项变为空。对于番石榴来说,根本没有错误。对于Java的File.listFiles(),dir.listFiles()变为null 此代码在Windows上运行,除了偶尔写入文件外,不会对目录执行任何其他操作。目录中只有一个文件 Windows中是否存在导致文件i/o在一段

我尝试了File.listFiles()和Guava的Files.fileTreeTraverser().BroadthFirstTraversal(dir)

在这两种情况下,程序运行一段时间后(每秒运行两次此特定代码),匹配项变为空。对于番石榴来说,根本没有错误。对于Java的File.listFiles(),dir.listFiles()变为null

此代码在Windows上运行,除了偶尔写入文件外,不会对目录执行任何其他操作。目录中只有一个文件


Windows中是否存在导致文件i/o在一段时间后停止工作的规则?

问题是,我的其他一些代码(错误地使用了JNA)未能正确释放文件句柄。因此,JVM最终耗尽了可提供的句柄,无法再列出文件。

只是一个猜测:您是否在没有正确关闭该文件的情况下多次打开该文件?您在哪里调用file.listFiles()?不,没有这样的规则。@Brotcrunsher,我没有打开它,只是获取文件名并删除和创建文件。没有打开任何输入或输出流。@Oleg File.listFiles()以前是当前fileTreeTraverser()的位置,我想说的是我两个都试过了,但最近试过的是我展示的(番石榴)。
    if (dir.exists()) {
        for (File f : Files.fileTreeTraverser().breadthFirstTraversal(dir)) {
            if (f.isFile()) {
                if (f.getName().endsWith(EXT)) {
                    matches.add(f);
                } else {
                    if (!f.getName().endsWith(".ini")) {
                        log.db("No match: " + f.getName());
                    }
                }
            }
        }
    } else {
        log.error("No directory found.");
        dir.mkdirs();
    }
    log.db(matches);