Scala-从文件夹中删除jpgs

问题描述 投票:3回答:2

我正在寻找一种优雅的方法来删除扩展名为.jpg的文件夹中的所有文件

我有以下内容来计算一个文件夹中的jpg文件总数:

Option(new File(path).list).map(_.filter(_.endsWith(".jpg")).size).getOrElse(0)

在此先感谢,非常感谢您的帮助:)

file scala directory
2个回答
11
投票
for {
  files <- Option(new File(path).listFiles)
  file <- files if file.getName.endsWith(".jpg")
} file.delete()

0
投票

一些额外的评论,扩展@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.. 

我认为这更安全,并使用Scalaeffects功效

© www.soinside.com 2019 - 2024. All rights reserved.