【发布时间】:2012-01-27 04:27:44
【问题描述】:
如何在 Scala 的目录中获取文件列表(或所有 *.txt 文件)。 Source 类似乎没有帮助。
【问题讨论】:
标签: scala
如何在 Scala 的目录中获取文件列表(或所有 *.txt 文件)。 Source 类似乎没有帮助。
【问题讨论】:
标签: scala
new java.io.File(dirName).listFiles.filter(_.getName.endsWith(".txt"))
【讨论】:
JDK7版本,使用新的DirectoryStream类为:
import java.nio.file.{Files, Path}
Files.newDirectoryStream(path)
.filter(_.getFileName.toString.endsWith(".txt"))
.map(_.toAbsolutePath)
这不是一个字符串,而是一个路径,它上面有很多方便的方法,比如'relativize'和'subpath'。
请注意,您还需要导入 import scala.collection.JavaConversions._ 以启用与 Java 集合的互操作。
【讨论】:
import scala.collection.JavaConversions._ 这将像map 这样的 scala 方法添加到 Java 集合中,这对于与 java 库(如 nio)的互操作非常有用
scala> import java.nio.file.{Files, Paths, Path}; scala> import scala.collection.JavaConversions._; scala> for (file <- Files.newDirectoryStream(Paths.get("/Users/Ion/Uploads/"), "*.TXT")){ ` |打印(文件);` ` | };`
endsWith 方法的文档:...for example, the path "foo/bar" ends with "foo/bar" and "bar". It does not end with "r" or "/bar".。这是因为过滤器在Path 对象上运行,而不是Strings。
Java File 类确实是您所需要的,尽管它很容易为目录迭代添加一些 Scala 优点。
import scala.collection.JavaConversions._
for(file <- myDirectory.listFiles if file.getName endsWith ".txt"){
// process the file
}
【讨论】:
collection,而您的for 中缺少右括号。
目前,您应该使用 Java 库来执行此操作。
【讨论】: