列出 Scala 目录下具有特定扩展名的所有文件
List all files with specific extension beneath a directory in Scala
我正在尝试从给定目录(及其子目录)中获取具有给定扩展名的所有文件的列表。
到目前为止我做了什么:
var pipelineList: List[File] = Nil
private def getPipelines(dir: File): Unit =
{
val tmp = dir.listFiles();
for (f <- tmp) {
if (f.isDirectory())
getPipelines(f)
else if (f.isFile() && (f.getName.endsWith(".pipeline"))) {
pipelineList = pipelineList ::: List(f)
}
}
}
这是有效的,因为我正在获取所有带有“.pipeline”扩展名的文件,但我希望函数 return 文件对象列表(列表、数组任何东西)而不是修改外部列表。我尝试在内部声明列表,但递归调用每次都重新初始化列表,还尝试将结果列表作为参数传递,但是当我尝试向其中添加任何内容时 Scala 抛出错误,说它无法重新分配给 val.
也尝试了另一种方式:
def getListOfFiles(dir: File): Array[File] = {
val filesList= dir.listFiles
filesList ++ filesList.filter(_.isDirectory).flatMap(getListOfFiles)
filesList.filter(_.getName.endsWith(".pipeline"))
}
这已成功获取目录下的所有文件,但过滤器无法正常工作,因为它没有 returning 任何东西,即使谓词得到满足。
感谢任何帮助。
filesList ++ filesList.filter(_.isDirectory).flatMap(getListOfFiles)
正在返回一个新的 不可变数组 而不更改 filesList
。所以你需要:
val res = filesList ++ filesList.filter(_.isDirectory).flatMap(getListOfFiles)
res.filter(_.getName.endsWith(".pipeline"))
我正在尝试从给定目录(及其子目录)中获取具有给定扩展名的所有文件的列表。 到目前为止我做了什么:
var pipelineList: List[File] = Nil
private def getPipelines(dir: File): Unit =
{
val tmp = dir.listFiles();
for (f <- tmp) {
if (f.isDirectory())
getPipelines(f)
else if (f.isFile() && (f.getName.endsWith(".pipeline"))) {
pipelineList = pipelineList ::: List(f)
}
}
}
这是有效的,因为我正在获取所有带有“.pipeline”扩展名的文件,但我希望函数 return 文件对象列表(列表、数组任何东西)而不是修改外部列表。我尝试在内部声明列表,但递归调用每次都重新初始化列表,还尝试将结果列表作为参数传递,但是当我尝试向其中添加任何内容时 Scala 抛出错误,说它无法重新分配给 val.
也尝试了另一种方式:
def getListOfFiles(dir: File): Array[File] = {
val filesList= dir.listFiles
filesList ++ filesList.filter(_.isDirectory).flatMap(getListOfFiles)
filesList.filter(_.getName.endsWith(".pipeline"))
}
这已成功获取目录下的所有文件,但过滤器无法正常工作,因为它没有 returning 任何东西,即使谓词得到满足。
感谢任何帮助。
filesList ++ filesList.filter(_.isDirectory).flatMap(getListOfFiles)
正在返回一个新的 不可变数组 而不更改 filesList
。所以你需要:
val res = filesList ++ filesList.filter(_.isDirectory).flatMap(getListOfFiles)
res.filter(_.getName.endsWith(".pipeline"))