발리 :
내가 폴더를 "/ A / B /"내가 파일, 디렉토리 및 파일이 디렉토리 내부의 서브 디렉토리를 포함하여 폴더 B의 삭제 모든 것을 내부 싶지만, 내가 그것을 삭제하지 않고 빈 B 폴더를 유지하려는. 내가 시도하는 것은이었다 :
Files.walk(Paths.get("/a/b/"))//
.map(Path::toFile)//
.sorted(Comparator.comparing(File::isDirectory))//
.forEach(File::delete);
이 폴더 B 안에 모든 것을 삭제하면이 솔루션은 벌금을했다,하지만 내가 계속하고 싶습니다 또한 폴더 나 삭제. 내가 폴더 B를 유지하려면 여기를 변경하는 방법, 캔 사람이 나에게 팁을주는? 감사합니다
davidxxx :
모든하지만,이 디렉토리를 필터링 :
Path rootPath = Paths.get("/a/b/");
Files.walk(rootPath)//
.filter(p -> !p.equals(rootPath))
.map(Path::toFile)//
.sorted(Comparator.comparing(File::isDirectory))//
.forEach(File::delete);
참고 .sorted(Comparator.comparing(File::isDirectory))
충분하지 않을 수 있습니다.
첫 번째 인스턴스의 디렉토리를 삭제하는 것은 중요하지만, 자신의 삭제 순서는 너무 중요.
당신이 디렉토리가 있다고 가정 : /a/b/
, /a/b/c
, /a/b/c/d
.
당신은 그 전에 깊이 우선 디렉토리 깊이 지난 삭제하려는 /a/b/c/d
전에 /a/b/c
.
그러나 File.walk()
깊이 우선 안내합니다. 그래서 순서대로 반복한다 : /a/b/
, /a/b/c
, /a/b/c/d
.
그래서 스트림의 자연 순서를 반대로 File
:
.sorted(Comparator.reverseOrder())