我正在使用此代码读取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 - java.nio.file.FileSystemException:/proc:打开的文件过多,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26334421/

10-14 10:49
查看更多