すべてのファイルとサブディレクトリを削除しますが、Javaで空のカレントディレクトリを保ちます

バリ:

私は「/ / B /」フォルダを持っていると私は、これらのディレクトリ内のファイル、ディレクトリとファイルとサブディレクトリを含め、フォルダBの削除、すべての内部したいが、私は、削除せずに空のフォルダbを維持したいです。私が試してみましたことでした。

Files.walk(Paths.get("/a/b/"))//
                 .map(Path::toFile)//
                 .sorted(Comparator.comparing(File::isDirectory))//
                 .forEach(File::delete);

それはフォルダBの内のすべてを削除したときに、このソリューションは、罰金を働いたが、それは私がキープしたいまた、フォルダ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=206155&siteId=1