-
Notifications
You must be signed in to change notification settings - Fork 0
Java traverse files
Costin Grigore edited this page Oct 29, 2018
·
4 revisions
-
java.io.File.listFiles- old java IO -
java.nio.Files.newDirectoryStream- NIO & NIO2 - new java IO -
org.apache.commons.io.FileUtils.iterateFilesandorg.apache.commons.io.FileUtils.iterateFilesAndDirs(commons-io:2.6) - uses jdk7 but File.listFiles -
com.google.common.io.Files.fileTreeTraverser(guava:26.0) uses jdk7 but File.listFiles -
com.google.common.io.Files.fileTraverser- https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/io/Files.html#fileTraverser-- -
java.nio.Files.walk- uses newDirectoryStream and returns a Stream -
java.nio.Files.walkFileTree- uses newDirectoryStream by using a java.nio.file.FileVisitor
- See how a Finder is implemented at https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/essential/io/examples/Find.java
- https://docs.oracle.com/javase/tutorial/essential/io/walk.html
- manually iterate using Files.newDirectoryStream - https://examples.javacodegeeks.com/core-java/nio/java-nio-iterate-files-directory/
- parallel iterate using Files.walkFileTree - https://stackoverflow.com/questions/17732819/parallel-version-of-files-walkfiletree-java-or-scala
- File.listFiles is also an option but is using old java IO library.
- walkFileTree example - https://www.concretepage.com/java/jdk7/traverse-directory-structure-using-files-walkfiletree-java-nio2
-
com.google.common.io.Files.fileTreeTraverseris usesFile.listFilesbut also the deprecatedcom.google.common.collect.TreeTraverser(bettercom.google.common.graph.Traverser) that is a generic way to traverse a tree. - https://stackoverflow.com/questions/20987214/recursively-list-all-files-within-a-directory-using-nio-file-directorystream
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