@@ -7,8 +7,12 @@ package dotty.tools.io
77
88import scala .language .implicitConversions
99import java .io .RandomAccessFile
10- import java .nio .file .{ DirectoryNotEmptyException , FileAlreadyExistsException , Files , NoSuchFileException , Paths }
10+ import java .nio .file ._
1111import java .net .{URI , URL }
12+ import java .nio .file .attribute .BasicFileAttributes
13+ import java .io .IOException
14+
15+ import scala .collection .JavaConverters ._
1216
1317import scala .util .Random .alphanumeric
1418
@@ -51,7 +55,7 @@ object Path {
5155 def onlyDirs (xs : List [Path ]): List [Directory ] = xs filter (_.isDirectory) map (_.toDirectory)
5256 def onlyFiles (xs : Iterator [Path ]): Iterator [File ] = xs filter (_.isFile) map (_.toFile)
5357
54- def roots : List [Path ] = java.io. File .listRoots ().toList .map(r => Path .apply(r.toPath))
58+ def roots : List [Path ] = FileSystems .getDefault.getRootDirectories.iterator ().asScala .map(Path .apply).toList
5559
5660 def apply (path : String ): Path = apply(Paths .get(path))
5761 def apply (jpath : JPath ): Path = try {
@@ -226,12 +230,21 @@ class Path private[io] (val jpath: JPath) {
226230 /** Deletes the path recursively. Returns false on failure.
227231 * Use with caution!
228232 */
229- def deleteRecursively (): Boolean = deleteRecursively(jpath)
230- private def deleteRecursively (p : JPath ): Boolean = {
231- import scala .collection .JavaConverters ._
232- if (Files .isDirectory(p))
233- Files .list(p).iterator().asScala.foreach(deleteRecursively)
234- delete(p)
233+ def deleteRecursively (): Boolean = {
234+ if (isDirectory) {
235+ Files .walkFileTree(jpath, new SimpleFileVisitor [JPath ]() {
236+ override def visitFile (file : JPath , attrs : BasicFileAttributes ) = {
237+ Files .delete(file)
238+ FileVisitResult .CONTINUE
239+ }
240+
241+ override def postVisitDirectory (dir : JPath , exc : IOException ) = {
242+ Files .delete(dir)
243+ FileVisitResult .CONTINUE
244+ }
245+ })
246+ true
247+ } else false
235248 }
236249
237250 private def delete (path : JPath ): Boolean =
0 commit comments