我有一个程序可以从嵌套目录中获取数据,然后对其进行处理。我以为这些目录具有均匀的结构,可以执行以下操作来检索它们:
val inputPath = basePath + dataSet + "/*/*/*/*/*/"
但是,某些目录甚至更加嵌套。例如,假设我们具有以下目录结构:
/hello/world/my/name/is/somedatafiles
可以有另一个如下所示的目录结构:/hello/world/my/name/is/waldo/somedatafiles
有没有一种方法可以通过不均匀的目录结构到达Scala中的目录末尾?
答案 0 :(得分:1)
看看Rosettacode.org的这个片段:
import java.io.File
object `package` {
def walkTree(file: File): Iterable[File] = {
val children = new Iterable[File] {
def iterator = if (file.isDirectory) file.listFiles.iterator else Iterator.empty
}
Seq(file) ++: children.flatMap(walkTree(_))
}
}
object Test extends App {
val dir = new File("/home/user")
for(f <- walkTree(dir)) println(f)
for(f <- walkTree(dir) if f.getName.endsWith(".mp3")) println(f)
}
https://rosettacode.org/wiki/Walk_a_directory/Recursively#Scala
这应该可以解决问题。
答案 1 :(得分:0)
walkTree
返回文件和目录,
也就是说,最终可以有一个名为.mp3的目录,
因此最好进行过滤,例如:
val dirList = walkTree(f).filter(!isDirectory(_)).map ...