バリ:
私は「/ / 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())