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