How do I list all files in a subdirectory in scala?

后端 未结 19 1475
旧巷少年郎
旧巷少年郎 2020-11-28 03:35

Is there a good \"scala-esque\" (I guess I mean functional) way of recursively listing files in a directory? What about matching a particular pattern?

For example re

19条回答
  •  北海茫月
    2020-11-28 04:14

    Scala code typically uses Java classes for dealing with I/O, including reading directories. So you have to do something like:

    import java.io.File
    def recursiveListFiles(f: File): Array[File] = {
      val these = f.listFiles
      these ++ these.filter(_.isDirectory).flatMap(recursiveListFiles)
    }
    

    You could collect all the files and then filter using a regex:

    myBigFileArray.filter(f => """.*\.html$""".r.findFirstIn(f.getName).isDefined)
    

    Or you could incorporate the regex into the recursive search:

    import scala.util.matching.Regex
    def recursiveListFiles(f: File, r: Regex): Array[File] = {
      val these = f.listFiles
      val good = these.filter(f => r.findFirstIn(f.getName).isDefined)
      good ++ these.filter(_.isDirectory).flatMap(recursiveListFiles(_,r))
    }
    

提交回复
热议问题