1. ホーム
  2. scala

[解決済み] scalaでサブディレクトリ内の全ファイルをリストアップするには?

2023-02-05 12:14:08

質問

ディレクトリ内のファイルを再帰的にリストする良い "scala-esque" (私は機能的という意味だと思います) 方法はありますか?特定のパターンに一致させることはどうですか?

例えば、再帰的にマッチするすべてのファイル "a*.foo"c:\temp .

どのように解決するのですか?

Scalaのコードは通常、ディレクトリの読み込みを含むI/Oを処理するためにJavaのクラスを使用します。 そのため、以下のようなことをしなければなりません。

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

すべてのファイルを集めて、正規表現を使ってフィルタリングすることができます。

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

あるいは、再帰検索に正規表現を組み入れることもできます。

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