[ https://issues.apache.org/jira/browse/IO-811?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17770926#comment-17770926 ]
Adam Rauch commented on IO-811: ------------------------------- [StreamIterator test PR|https://github.com/apache/commons-io/pull/490] created. This test will fail until StreamIterator.iterator() is fixed. [~ggregory] let me know if you want me to also fix the method and make it package private. > Files.walk() direct and indirect callers fail to close the returned > Stream<Path> > -------------------------------------------------------------------------------- > > Key: IO-811 > URL: https://issues.apache.org/jira/browse/IO-811 > Project: Commons IO > Issue Type: Bug > Components: Utilities > Affects Versions: 2.13.0 > Environment: Windows 11, Eclipse Adoptium OpenJDK 17.0.8.1+1 > Reporter: Adam Rauch > Priority: Major > Fix For: 2.14.1 > > > JDK method Files.walk() clearly documents that the returned Stream<Path> must > be closed: "This method must be used within a try-with-resources statement or > similar control structure to ensure that the stream's open directories are > closed promptly after the stream's operations have completed." However, the > Commons IO methods that consume these streams fail to close them. And the > methods that pass on these streams fail to document that closing them is > required. > Problematic methods that I see: > * PathUtils.walk() lacks a documentation warning > * FilesUncheck.walk() both variants lack a documentation warning > * FileUtils.streamFiles() lacks a documentation warning > * FileUtils.listFiles() consumes a Files.walk() stream without closing it > * FileUtils.iterateFiles() claims to close the stream if the iterator is > consumed, however, in my test of consuming an iterator returned from this > method, a breakpoint set on FileTreeWalker.close() is never hit > Failing to close these streams can result in file handle leaks and other > problems, hence the importance of documenting and heading this requirement > from the JDK method. -- This message was sent by Atlassian Jira (v8.20.10#820010)