检查文件是否存在于嵌套的目录中?

时间:2018-09-12 20:12:24

标签: java scala apache-spark

我有一个程序可以从嵌套目录中获取数据,然后对其进行处理。我以为这些目录具有均匀的结构,可以执行以下操作来检索它们:

val inputPath = basePath + dataSet + "/*/*/*/*/*/"但是,某些目录甚至更加嵌套。例如,假设我们具有以下目录结构:

/hello/world/my/name/is/somedatafiles可以有另一个如下所示的目录结构:/hello/world/my/name/is/waldo/somedatafiles

有没有一种方法可以通过不均匀的目录结构到达Scala中的目录末尾?

2 个答案:

答案 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 ...