在 Scala 中以递归方式删除目录

2022-09-01 07:57:30

我正在写以下内容(使用Scala 2.10和Java 6):

import java.io._

def delete(file: File) {
  if (file.isDirectory) 
    Option(file.listFiles).map(_.toList).getOrElse(Nil).foreach(delete(_))
  file.delete
}

你会如何改进它?代码似乎可以正常工作,但它忽略了 的返回值。它能比?java.io.File.deletescala.iojava.io


答案 1

用纯 scala + java 的方式

import scala.reflect.io.Directory
import java.io.File

val directory = new Directory(new File("/sampleDirectory"))
directory.deleteRecursively()

delete递归() 失败时返回 false


答案 2

请尝试以下代码,如果失败,则引发异常:

def deleteRecursively(file: File): Unit = {
  if (file.isDirectory) {
    file.listFiles.foreach(deleteRecursively)
  }
  if (file.exists && !file.delete) {
    throw new Exception(s"Unable to delete ${file.getAbsolutePath}")
  }
}

如果要为所有删除返回值,也可以折叠或映射删除。