Scala:递归删除目录不起作用

时间:2019-10-11 21:56:12

标签: scala

我正在寻找Delete directory recursively in Scala的Garrett Hall提供的解决方案

import scala.reflect.io.Directory
import java.io._

val dir : String = "/tmp/tempdir_prefix5708675182947835848"

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

deleteRecursively(dir.asInstanceOf(File))

这会导致错误

con@VB:~/Scripts/scala$ scala delete_dir.scala
/home/con/Scripts/scala/delete_dir.scala:15: error: T0 does not take parameters
deleteRecursively(dir.asInstanceOf(File))
                                  ^
one error found

我也尝试过

deleteRecursively(dir))

但这会导致错误

con@VB:~/Scripts/scala$ scala delete_dir.scala
/home/con/Scripts/scala/delete_dir.scala:15: error: type mismatch;
 found   : String
 required: java.io.File
deleteRecursively(dir)

还有deleteRecursively(File(dir))

但这给了

con@VB:~/Scripts/scala$ scala delete_dir.scala
/home/con/Scripts/scala/delete_dir.scala:15: error: object java.io.File is not a value
deleteRecursively(File(dir))

我是Scala的新手,但找不到解决方案。我觉得原始的海报忘记了要添加的东西,就像他希望所有人都知道的那样,但是我不是,因为我经验不足。

如何修改代码,以便将目录作为字符串传递以递归删除?

1 个答案:

答案 0 :(得分:1)

我还没有在自己的机器上测试该解决方案,但是您似乎犯了一个非常容易修复的错误。您的deleteRecursively函数接受类型为File的输入,因此您需要传递类型为File的参数。

deleteRecursively函数本身似乎没有什么问题。

val dir : File = new File("/tmp/tempdir_prefix5708675182947835848")

deleteRecursively(dir)

如果此修复不能解决您的问题,请在评论中让我知道。很高兴与您合作解决这个问题。

相关问题