모든 파일과 하위 디렉토리를 삭제하지만, 자바 빈 현재 디렉토리를 유지

발리 :

내가 폴더를 "/ 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())

추천

출처http://43.154.161.224:23101/article/api/json?id=206153&siteId=1