나는 반복적으로재귀 스트림
자바 (8) 모든 파일과 디렉토리 만 재귀없이 반환하는 listFiles
방법을 제공하는 자바 (8)를 사용하여 내 컴퓨터의 모든 파일을 나열합니다. 어떻게 그것을 (돌연변이 컬렉션을 사용하지 않고) 파일의 전체 재귀 목록을 얻으려면 사용할 수 있습니까? (이유는 확실하지)
참고
static Function<Path, Stream<Path>> listFiles = p -> {
if (p.toFile().isDirectory()) {
try { return Files.list(p); }
catch (Exception e) { return Stream.empty(); }
} else {
return Stream.of(p);
}
};
public static void main(String[] args) throws IOException {
Path root = Paths.get("C:/temp/");
Files.list(root).flatMap(listFiles).forEach(System.out::println);
}
그리고 return Files.list(p).flatMap(listFiles);
를 사용하여 컴파일되지 않습니다 :
나는 아래의 코드를 시도했지만 그것은 단지 깊은 한 수준을 간다 내가 관심이 아니다 FileVisitors 또는 외부 라이브러리와 관련된 솔루션
'Files.walkFileTree'? 아니면 정말 재귀 적 스트림을 사용하고 싶습니까? :-) –
@StuartMarks 예 재귀 스트림을 사용하고 싶습니다! 그리고 walkFileTree는 아주 길어서 "one-liner"를 찾으려고했습니다. – assylias
와우, 나는'Files.walk'을 의미했습니다. Path를 취해 Stream를 돌려줍니다. –