在 Scala 中递归删除目录

新手上路,请多包涵

我正在编写以下内容(使用 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.delete 的返回值。使用 scala.io 而不是 java.io 可以更容易地完成吗?

原文由 Michael 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 701
2 个回答

用纯scala + java的方式

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

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

deleteRecursively() 失败时返回 false

原文由 nomadSK25 发布,翻译遵循 CC BY-SA 4.0 许可协议

尝试此代码,如果失败则抛出异常:

 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}")
  }
}

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

原文由 Garrett Hall 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题