diff --git a/src/main/java/com/dostalgia/ExecutableDetector.java b/src/main/java/com/dostalgia/ExecutableDetector.java index 34288a3..b476895 100644 --- a/src/main/java/com/dostalgia/ExecutableDetector.java +++ b/src/main/java/com/dostalgia/ExecutableDetector.java @@ -36,19 +36,7 @@ public class ExecutableDetector { ); public List findAll(Path dir) throws IOException { - List result = new ArrayList<>(); - Files.walkFileTree(dir, new SimpleFileVisitor<>() { - @Override - public @Nonnull FileVisitResult visitFile(@Nonnull Path f, @Nonnull BasicFileAttributes a) { - String name = f.getFileName().toString().toLowerCase(); - if (name.endsWith(".exe") || name.endsWith(".com") || name.endsWith(".bat")) { - result.add(dir.relativize(f).toString().replace('\\', '/')); - } - return FileVisitResult.CONTINUE; - } - }); - result.sort(String::compareTo); - return result; + return FileUtils.findFilesByExtensions(dir, Set.of(".exe", ".com", ".bat")); } public String findMain(Path dir) throws IOException { diff --git a/src/main/java/com/dostalgia/FileUtils.java b/src/main/java/com/dostalgia/FileUtils.java index af3c7f0..51e317b 100644 --- a/src/main/java/com/dostalgia/FileUtils.java +++ b/src/main/java/com/dostalgia/FileUtils.java @@ -8,6 +8,9 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; /** Shared file-system utilities. */ public final class FileUtils { @@ -30,4 +33,28 @@ public final class FileUtils { } }); } + + /** + * Walk a directory tree and collect relative paths of files whose extension matches + * one of the given extensions. Extensions should include the dot, e.g. {@code ".exe"}. + * Results are sorted alphabetically. + */ + public static List findFilesByExtensions(Path dir, Set extensions) throws IOException { + List result = new ArrayList<>(); + Files.walkFileTree(dir, new SimpleFileVisitor<>() { + @Override + public FileVisitResult visitFile(Path f, BasicFileAttributes a) { + String name = f.getFileName().toString().toLowerCase(); + for (String ext : extensions) { + if (name.endsWith(ext)) { + result.add(dir.relativize(f).toString().replace('\\', '/')); + break; + } + } + return FileVisitResult.CONTINUE; + } + }); + result.sort(String::compareTo); + return result; + } }