从Scala中的目录中读取文件

sna*_*ppy 29 scala

如何在Scala中的目录中获取文件列表(或所有*.txt文件).Source类似乎没有帮助.

huy*_*hjl 49

new java.io.File(dirName).listFiles.filter(_.getName.endsWith(".txt"))
Run Code Online (Sandbox Code Playgroud)


小智 16

JDK7版本,使用新的DirectoryStream类是:

import java.nio.file.{Files, Path}
Files.newDirectoryStream(path)
    .filter(_.getFileName.toString.endsWith(".txt"))
    .map(_.toAbsolutePath)
Run Code Online (Sandbox Code Playgroud)

这将返回一个Path,而不是一个字符串,它有许多方便的方法,比如'relativize'和'subpath'.

请注意,您还需要导入import scala.collection.JavaConversions._以启用与Java集合的互操作.

  • @NickCecil您的文本文件过滤器无法按预期工作.从`endsWith`方法的文档:`...例如,路径"foo/bar"以"foo/bar"和"bar"结尾.它不以"r"或"/ bar"结尾.这是因为过滤器在`Path`对象上运行而不是`Strings`. (2认同)

Dav*_*ith 15

Java File类实际上就是你所需要的,尽管很容易在目录迭代中添加一些Scala优点.

import scala.collection.JavaConversions._

for(file <- myDirectory.listFiles if file.getName endsWith ".txt"){
   // process the file
}
Run Code Online (Sandbox Code Playgroud)