[ 
https://issues.apache.org/jira/browse/IO-760?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17485937#comment-17485937
 ] 

Gary D. Gregory commented on IO-760:
------------------------------------

[[email protected]] 

The Javadoc for the method you are calling states "{*}The resulting iterator 
MUST be consumed in its entirety in order to close its underlying stream.{*}"

The library has other file system traversal APIs, see {{{}PathUtils{}}}.

> FileUtils.iterateFiles create Too many open files
> -------------------------------------------------
>
>                 Key: IO-760
>                 URL: https://issues.apache.org/jira/browse/IO-760
>             Project: Commons IO
>          Issue Type: Bug
>          Components: Utilities
>    Affects Versions: 2.11.0
>         Environment: Commons-io 2.11.0
> Java 11
> Linux
>            Reporter: thierry Martinez
>            Priority: Major
>
> 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":
> {code:java}
> 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);
>         }
>     }}
>  {code}
> Exception trace:
> {code:java}
> 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{code}
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to