【发布时间】:2023-03-23 08:11:01
【问题描述】:
我有一个目录,其中的文件看起来像 part-00000、part-00001 等。还有其他文件我不想遍历,所以我想做某种形式的模式匹配/regex/过滤以“part-”开头的文件名。
如何仅遍历以“part-”开头的文件?
【问题讨论】:
我有一个目录,其中的文件看起来像 part-00000、part-00001 等。还有其他文件我不想遍历,所以我想做某种形式的模式匹配/regex/过滤以“part-”开头的文件名。
如何仅遍历以“part-”开头的文件?
【问题讨论】:
你可以使用过滤器:
new File("c:/sequence-files/").listFiles.filter(_.getName.startsWith("part-")).foreach(println)
【讨论】:
前提是你已经有了文件列表:
object Test {
def main(args: Array[String]) {
val listOfFiles = List("part-00000", "part-00001", "randomFile", "part-00003", "randomFile2", "part-00004")
val prefix = "part-"
listOfFiles.filter(_.startsWith(prefix)).map(println)
}
}
我们获取列表并首先应用一个过滤器,然后映射每个元素。 你可以在 map 中添加任何你想要的逻辑。
【讨论】:
你可以这样定义一个函数:
def listFiles(file: File, pattern: String): Array[File] = {
val files = file.listFiles()
val regex = pattern.r
files
.filter(f => f.isFile() && regex.findFirstIn(file.getName).isDefined)
.toArray
}
并使用directory 和pattern 调用它。由于您想要所有以part- 开头的文件,因此模式将为part-*。下面是示例调用
val files = listFiles(new File("path), "part-*")
【讨论】: