Java traverse files - raisercostin/raisercostin.github.io GitHub Wiki

Methods

  1. java.io.File.listFiles - old java IO
  2. java.nio.Files.newDirectoryStream - NIO & NIO2 - new java IO
  3. org.apache.commons.io.FileUtils.iterateFiles and org.apache.commons.io.FileUtils.iterateFilesAndDirs (commons-io:2.6) - uses jdk7 but File.listFiles
  4. com.google.common.io.Files.fileTreeTraverser (guava:26.0) uses jdk7 but File.listFiles
  5. com.google.common.io.Files.fileTraverser - https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/io/Files.html#fileTraverser--
  6. java.nio.Files.walk - uses newDirectoryStream and returns a Stream
  7. java.nio.Files.walkFileTree - uses newDirectoryStream by using a java.nio.file.FileVisitor

More resources

Sequence diagram

Comparison of how to traverse files in jdk7 using Files.walk, Files.walkFileTree and Files.newDirectoryStream. All of them call Files.newDirectoryStream which is implemented natively by JVM. This lists all entries in a directory.

sequenceDiagram
  Client->>+Files:walk => Stream<Path>
  Files->>FileTreeIterator: create
  FileTreeIterator->>FileTreeWalker: create
  Note right of DirectoryStream: lists only a directory
  FileTreeWalker->>DirectoryStream:create
  Files->>FileTreeIterator: iterate
  FileTreeIterator->>FileTreeWalker: walk => Event
  FileTreeWalker->>DirectoryStream:create | walk | next
  Client->>Files:newDirectoryStream
  Files->>DirectoryStream: create
  Note right of DirectoryStream:stream inside a directory
  Client->>Files:walkFileTree(visitor:FileVisitor<Path>)
  Files->>FileTreeWalker:create
  Files->>Files:iterate
  Files->>FileTreeWalker:walk => Event
  FileTreeWalker->>DirectoryStream:create | walk | next
Loading
⚠️ **GitHub.com Fallback** ⚠️