Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Scala中的目录获取文件列表_Scala - Fatal编程技术网

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

从Scala中的目录获取文件列表,scala,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 我已经尝试了下面的代码,但它不起作用。我

我有一个目录
“/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())

下面是一个简单的例子

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")
希望这有帮助

是执行Scala文件系统操作的最简单、最优雅的方法

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")
以下是如何列出以“03_ss”开头的文件:

os.list(os.pwd/“local_data”).filter(u.segments.toList.last.startsWith(“03_ssa”))
此解决方案功能强大,因为它允许您对以“03_ssa”开头的文件执行额外的文件系统操作。您可以将这些文件移动到其他目录,获取文件大小,重命名它们,删除它们,无论您想要什么

它不像其他简单地返回字符串列表的解决方案。有关如何利用os lib功能的更多信息,请参阅

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

os.makeDir(os.pwd/“本地数据”)
写操作系统(os.pwd/“本地数据”/“03_ssa_fruits.csv”,“”)
写操作系统(os.pwd/“本地数据”/“03_ssa_can.csv”,“”)
写操作系统(os.pwd/“本地数据”/“03_ssa_veg.csv”,“”)
写操作系统(os.pwd/“本地数据”/“sxattru.csv”,“”)
os.write(os.pwd/“本地_数据”/“sxprod.csv”,“”)
写操作系统(os.pwd/“本地_数据”/“sxstore.csv”,“”)

尝试删除文件.getName.startsWith(“03_ss*”)中的
*
。查看文档字符串对象方法
startsWith
不支持包含通配符的regexp,因此您只需指定前缀
03_ss
谢谢,它正在工作。我的错误。抱歉!!是使用Scala执行这样的文件系统操作的最佳现代解决方案。os lib使列出文件变得非常简单,并隐藏了底层Java lib的所有复杂性。更多细节请参见我的答案。
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
    }