从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
}