diff --git a/visitors/src/main/java/files/jvm/visitors/DirectoryVisitor.java b/visitors/src/main/java/files/jvm/visitors/DirectoryVisitor.java index 31f6f22..2b43508 100644 --- a/visitors/src/main/java/files/jvm/visitors/DirectoryVisitor.java +++ b/visitors/src/main/java/files/jvm/visitors/DirectoryVisitor.java @@ -1,5 +1,6 @@ package files.jvm.visitors; +import java.io.File; import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; @@ -8,7 +9,12 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.Set; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; /** Visits Files and Directories in a single level, * records the files and directories that were found. @@ -19,18 +25,21 @@ public class DirectoryVisitor { */ public final boolean isValidDirectory; - private final List mDirectories; + @Nullable + protected final List mDirectories; - private final List mFiles; + @Nullable + protected final List mFiles; - private final Path mPath; + @Nonnull + protected final Path mPath; /** Constructor. * @param path The path to visit. * @throws IOException Any Exception thrown while Visiting the Path. */ public DirectoryVisitor( - final Path path + @Nonnull final Path path ) throws IOException { mPath = path; if (!Files.isDirectory(path)) { @@ -78,24 +87,27 @@ public FileVisitResult visitFile( /** Obtain the directory names found at this Path. * @return The List of directories, or an empty List. */ + @Nonnull public List getDirectories() { - if (mDirectories == null) - return Collections.emptyList(); - return mDirectories; + return Objects.requireNonNullElse( + mDirectories, Collections.emptyList() + ); } /** Obtain the File names found at this Path. * @return The List of File Names, or an empty List. */ + @Nonnull public List getFiles() { - if (mFiles == null) - return Collections.emptyList(); - return mFiles; + return Objects.requireNonNullElse( + mFiles, Collections.emptyList() + ); } /** Obtain all files in this directory as a List of Paths. * @return A List of Paths, or an empty list. */ + @Nonnull public List getFilePaths() { if (mFiles == null) return Collections.emptyList(); @@ -105,9 +117,23 @@ public List getFilePaths() { .toList(); } + /** Obtain a Stream of all Files in the Directory. + * @return A Stream of File objects. + */ + @Nonnull + public Stream getFileStream() { + if (mFiles == null) + return Stream.empty(); + return mFiles + .parallelStream() + .map(mPath::resolve) + .map(Path::toFile); + } + /** Obtain all Directories in this directory as a List of Paths. * @return A List of Paths, or an empty list. */ + @Nonnull public List getDirectoryPaths() { if (mDirectories == null) return Collections.emptyList(); @@ -117,4 +143,16 @@ public List getDirectoryPaths() { .toList(); } + /** Obtain all Directories in this directory as a Stream of Paths. + * @return A Stream of Paths. + */ + @Nonnull + public Stream getDirectoryPathStream() { + if (mDirectories == null) + return Stream.empty(); + return mDirectories + .parallelStream() + .map(mPath::resolve); + } + } \ No newline at end of file diff --git a/visitors/src/test/java/files/jvm/visitors/DirectoryVisitorTest.java b/visitors/src/test/java/files/jvm/visitors/DirectoryVisitorTest.java index d066d89..3fbc6a3 100644 --- a/visitors/src/test/java/files/jvm/visitors/DirectoryVisitorTest.java +++ b/visitors/src/test/java/files/jvm/visitors/DirectoryVisitorTest.java @@ -115,6 +115,15 @@ public void testGetFilePaths_InvalidDirectory_ReturnsEmptyList() throws IOExcept ); } + @Test + public void testGetFileStream_() { + final var pathList = mInstance.getFileStream(); + assertEquals( + numberOfFiles, + pathList.toList().size() + ); + } + @Test public void testGetDirectoryPaths_CorrectSize() { final List pathList = mInstance.getDirectoryPaths(); @@ -136,4 +145,13 @@ public void testGetDirectoryPaths_InvalidPath_ReturnsEmptyList() throws IOExcept ); } + @Test + public void testGetDirectoryPathStream_() { + final var pathList = mInstance.getDirectoryPathStream(); + assertEquals( + numberOfSubDirectories, + pathList.toList().size() + ); + } + } \ No newline at end of file