获取Scala中目录中的文件列表

时间:2018-01-09 05:52:05

标签: scala

我有一个目录"/local/dath/mi/",其中包含许多文件

03_ssa_fruits.csv
03_ssa_can.csv
03_ssa_veg.csv
sxattru.csv
sxprod.csv
sxstore.csv

我需要从该目录中提取特定文件的列表:

/local/dath/mi/03_ssa_fruits.csv
/local/dath/mi/03_ssa_can.csv
/local/dath/mi/03_ssa_veg.csv

我已经尝试了以下代码,但它无法正常工作。我做错了什么。任何人都可以帮助我

def getListOfFiles(dir: String , naming: String): List[String] = {
      File(dir).toJava.listFiles.filter(_.isFile).toList.filter { file =>
        file.getName.startsWith("03_ss*")
      }.map(_.toString)
    }


   val listOfFile = getListOfFiles(parentDir, File(data.salFilePath).toJava.getName())

4 个答案:

答案 0 :(得分:2)

这是一个简单的例子

import java.io.File

def getListOfFiles(dir: String): List[String] = {
  val file = new File(dir)
  file.listFiles.filter(_.isFile)
    .filter(_.getName.startsWith("03_ss"))
    .map(_.getPath).toList
}
getListOfFiles("dirrectory path")

希望这有帮助!

答案 1 :(得分:0)

def pathStringToPath(pathString: String): Path = Paths.get(pathString)

def pathStringToDir(pathString: String): Option[File] = pathToDir(pathStringToPath(pathString))

def pathToDir(path: Path): Option[File] = {
  val file = path.toFile
  file.isDirectory match {
    case true => Some(file)
    case false => None
  }
}

def filesInDir(pathString: String): List[File] = {
  val dirOption = pathStringToDir(pathString)
  dirOption.fold(List.empty[File])(dir => dir.listFiles().toList)
}

def filesWithPrefixInDir(dirPathString: String, fileNamePrefix: String): List[File] =
  filesInDir(dirPathString).filter(file => file.getName.startsWith(fileNamePrefix))

filesWithPrefixInDir(parentDir, "03_ss")

答案 2 :(得分:0)

def fetchFilesFromLocalDirectory(path : String) : List[File] = {
        val path = Paths.get(path)

        val file = path.toFile
        if(file.isDirectory){
            file.listFiles().filter(_.getName.endsWith(".txt")).toList
        }else List[File]() // TODO: If is not a directory, it should throw an error
    }

答案 3 :(得分:0)

os-lib是执行Scala文件系统操作的最简单,最优雅的方法。

以下是列出以“ 03_ss”开头的文件的方法:

os.list(os.pwd/"local_data").filter(_.segments.toList.last.startsWith("03_ssa"))

此解决方案功能强大,因为它使您可以对以“ 03_ssa”开头的文件执行其他文件系统操作。您可以根据需要将这些文件移动到其他目录,获取文件大小,对其进行重命名,删除。

与其他解决方案不同,它只是返回一个字符串列表。有关如何利用os-lib的功能的更多信息,请参见here

如果您想在自己的计算机上进行实验,请使用以下代码段来设置包含OP文件的文件夹:

os.makeDir(os.pwd/"local_data")
os.write(os.pwd/"local_data"/"03_ssa_fruits.csv", "")
os.write(os.pwd/"local_data"/"03_ssa_can.csv", "")
os.write(os.pwd/"local_data"/"03_ssa_veg.csv", "")
os.write(os.pwd/"local_data"/"sxattru.csv", "")
os.write(os.pwd/"local_data"/"sxprod.csv", "")
os.write(os.pwd/"local_data"/"sxstore.csv", "")