Scala - 从文件夹中删除jpgs

时间:2012-03-12 11:30:39

标签: file scala directory

我正在寻找一种优雅的方法来删除扩展名为.jpg

的文件夹中的所有文件

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

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

在此先感谢,任何帮助非常感谢:)

3 个答案:

答案 0 :(得分:11)

for {
  files <- Option(new File(path).listFiles)
  file <- files if file.getName.endsWith(".jpg")
} file.delete()

答案 1 :(得分: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.. 

我认为这更安全,并使用Scala的{​​{1}}力量

答案 2 :(得分:0)

os-lib使您可以使用一个衬里删除具有特定扩展名的所有文件:

os.list(os.pwd/"pics").filter(_.ext == "jpg").map(os.remove)

here所述,os-lib是使用Scala执行文件系统操作的最简单方法。它使您可以编写美观,简洁的Scala代码,而不必处理基础Java库的丑陋情况。

如果您想在计算机上进行测试,请使用以下设置代码:

os.makeDir(os.pwd/"pics")
os.write(os.pwd/"pics"/"family.jpg", "")
os.write(os.pwd/"pics"/"cousins.txt", "")
os.write(os.pwd/"pics"/"gf.jpg", "")
os.write(os.pwd/"pics"/"friend.gif", "")