gpt4 book ai didi

scala - 使用 Scala 2.8 continuations 递归遍历一个 LARGE 目录

转载 作者:行者123 更新时间:2023-12-01 12:55:58 26 4
gpt4 key购买 nike

是否可以使用 Scala continuations(在 2.8 中引入)递归遍历目录?

我的目录包含数百万个文件,所以我不能 use Stream 因为我会遇到内存不足的情况。我正在尝试编写一个 Actor dispatch让 worker actor 并行处理文件。

谁有例子吗?

最佳答案

如果您想坚持使用 Java 1.6(与 1.7 中的 FileVistor 相对),并且您有子目录而不是仅在一个目录中的所有数百万个文件,您可以

class DirectoryIterator(f: File) extends Iterator[File] {
private[this] val fs = Option(f.listFiles).getOrElse(Array[File]())
private[this] var i = -1
private[this] var recurse: DirectoryIterator = null
def hasNext = {
if (recurse != null && recurse.hasNext) true
else (i+1 < fs.length)
}
def next = {
if (recurse != null && recurse.hasNext) recurse.next
else if (i+1 >= fs.length) {
throw new java.util.NoSuchElementException("next on empty file iterator")
}
else {
i += 1;
if (fs(i).isDirectory) recurse = new DirectoryIterator(fs(i))
fs(i)
}
}
}

这要求您的文件系统没有循环。如果它确实有循环,您需要跟踪您在一组中命中的目录并避免再次递归它们。 (如果文件是从两个不同的地方链接的,那么您甚至不想两次点击这些文件,那么您必须将所有内容放入一个集合中,使用迭代器而不是只是将所有文件信息读入内存。)

关于scala - 使用 Scala 2.8 continuations 递归遍历一个 LARGE 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9827181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com