java.nio.file.FileSystemException :/proc: Too many open files

标签 java java-7 try-with-resources nio2

我使用此代码读取 proc 文件系统中的所有文件夹

for (Path processPath : 
        Files.newDirectoryStream(FileSystems.getDefault().getPath("/proc"), "[0-9]*"))
    {
       // Some logic                 
    }

一段时间后我收到此错误

java.nio.file.FileSystemException: /proc: Too many open files

看起来这个循环正在打开文件而不关闭它们。有没有办法在每次循环运行后关闭文件?

最佳答案

根据 oracle Javadoc: http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#newDirectoryStream(java.nio.file.Path)

当不使用 try-with-resources 构造时,应在迭代完成后调用目录流的 close 方法,以便释放为打开目录保留的任何资源。你做错的是在for循环中调用newDirectoryStream,所以你不能使用它的方法。

我只是认为,你应该这样做(如果你不想使用 try-with-resources):

        DirectoryStream<Path> dirStream = Files.newDirectoryStream(FileSystems.getDefault().getPath("/proc"), "[0-9]*");
    for (Path processPath : dirStream)
    {
       // your logic                
    }   
    dirStream.close();

关于java.nio.file.FileSystemException :/proc: Too many open files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26334421/

相关文章:

java - 如何调用Selenium到另一个类: NullPointerException

Java7 : What is some equivalent to specifing method references in a function call

java - 关于jls的一点的澄清

java - 使用 try-with-resources 关闭一个 Closeable

java - 将图形框架添加到JDialog Form中

java - 有没有办法在在线编译器中创建 JFrame?

java - 即使条件为真,为什么我的方法返回 false?

java - 将密码套件 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 添加到 Java 7

java - 类数组的字母顺序

java - InputStream 在 spring Controller 中关闭