我正在寻找一种优雅的方法来删除扩展名为.jpg的文件夹中的所有文件
我有以下内容来计算一个文件夹中的jpg文件总数:
Option(new File(path).list).map(_.filter(_.endsWith(".jpg")).size).getOrElse(0)
在此先感谢,非常感谢您的帮助:)
for {
files <- Option(new File(path).listFiles)
file <- files if file.getName.endsWith(".jpg")
} file.delete()
一些额外的评论,扩展@Debilski的答案:触摸文件显然会导致side effects
。要使其功能性地成为effectfull
,请执行以下操作:
def deleteFilesBySuffix[G[_]: Sync](suffix: String)(dirName: String): G[Unit] =
Sync[G].suspend(Sync[G].fromTry(Try(for {
files <- Option(new File(dirName).listFiles)
file <- files if file.getName.endsWith(suffix)
} file.delete())))
然后,您必须以可能会延迟该方法的执行如下:
import cats.IO
import cats.syntax.foldable._
val r = deleteFilesBySuffix[IO]("jpg")("/tmp")
//Still nothing happened
//Another example with multiple dirs:
val dirNames = List("/tmp", "/tmp/myDir")
val res = dirNames.traverse_(deleteFilesBySuffix[IO]("jpg"))
//Actually run it..
r.unsafeRunSunc()
//Now files are deleted..
我认为这更安全,并使用Scala
的effects
功效