Как найти все классы в директории с помощью File.walk
Суть проблемы: нужно найти все классы содержащиеся в выбраном пакете с помощью File.walk
Ответы (1 шт):
Автор решения: Alexandr
→ Ссылка
Вот небольшой пример:
package com.somepackage;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) throws IOException {
final var path =
Paths.get(
Main.class.getProtectionDomain().getCodeSource().getLocation().getPath(),
"/com/somepackage");
findFiles(path, Collections.singleton("class"))
.forEach(p -> System.out.println("File: [" + p.getFileName() + "]"));
}
public static Optional<String> getExtension(
String fileName) {
return Optional.of(fileName.lastIndexOf('.'))
.filter(i -> i >= 0)
.map(i -> fileName.substring(i + 1));
}
public static List<Path> findFiles(
Path path,
Set<String> extensions) throws IOException {
try (Stream<Path> paths = Files.walk(path)) {
return paths
.filter(Files::isRegularFile)
.filter(p ->
getExtension(p.getFileName().toString())
.filter(extensions::contains)
.isPresent())
.collect(Collectors.toList());
}
}
}
Вывод:
File: [Main.class]