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

时间:2017-10-14 21:52:26

标签: java windows

我已经尝试过File.listFiles()和Guava的Files.fileTreeTraverser()。breadthFirstTraversal(dir)。

    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);

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

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

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

1 个答案:

答案 0 :(得分:-1)

问题是我使用JNA(错误)的其他一些代码未能正确释放文件句柄。所以最终JVM用尽了句柄而无法再列出文件。