Uploaded image for project: 'Commons IO'
  1. Commons IO
  2. IO-760

FileUtils.iterateFiles create Too many open files

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Information Provided
    • 2.11.0
    • None
    • Utilities
    • None
    • Commons-io 2.11.0

      Java 11

      Linux

    Description

      When i use FileUtils.iterateFiles and i decide to not iterate on all results, something is not closed correctly.

      This code create "Too Many Open files":

      import java.io.File;
      import java.io.IOException;
      import java.nio.file.Files;
      import java.util.Iterator;
      import org.apache.commons.io.FileUtils;public class FileUtilsTest {
          static long step=0;
          public static void main(String[] argv) throws IOException {
              
              /*
               * create test directory
               */
              File tmpDirectory = Files.createTempDirectory("pipo").toFile();
              try {
                  /*
                   * add one file
                   */
                  new File(tmpDirectory, "first").createNewFile();            /*
                   * try until TooManyOpenFiles Exception
                   */
                  while(true) {
                      /*
                       * Iterate only to find first entry
                       */
                      Iterator<File> candidates = FileUtils.iterateFiles(tmpDirectory, null, false);
                      if (!candidates.hasNext()) {
                          throw new RuntimeException("one file must exists");
                      }
                      System.out.print("\rend step:"+(++step));
                  }
              } finally {
                  FileUtils.deleteDirectory(tmpDirectory);
              }
          }}
       

      Exception trace:

      java -cp Bug-all.jar FileUtilsTest
      end step:2044
      Exception in thread "main" java.io.UncheckedIOException: /tmp/pipo4192501847009771344
              at org.apache.commons.io.FileUtils.iterateFiles(FileUtils.java:1927)
              at FileUtilsTest.main(FileUtilsTest.java:28)
      Caused by: java.nio.file.FileSystemException: /tmp/pipo4192501847009771344: Too many open files
              at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100)
              at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
              at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
              at java.base/sun.nio.fs.UnixFileSystemProvider.newDirectoryStream(UnixFileSystemProvider.java:432)
              at java.base/java.nio.file.Files.newDirectoryStream(Files.java:472)
              at java.base/java.nio.file.FileTreeWalker.visit(FileTreeWalker.java:300)
              at java.base/java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:322)
              at java.base/java.nio.file.FileTreeIterator.<init>(FileTreeIterator.java:71)
              at java.base/java.nio.file.Files.walk(Files.java:3825)
              at org.apache.commons.io.file.PathUtils.walk(PathUtils.java:1044)
              at org.apache.commons.io.FileUtils.streamFiles(FileUtils.java:2971)
              at org.apache.commons.io.FileUtils.iterateFiles(FileUtils.java:1925)
              ... 1 more

       

      Attachments

        Activity

          People

            Unassigned Unassigned
            thierry.martinez@wedia.fr thierry Martinez
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: