微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Files.walkFileTree的并行版本(java或scala)

有没有人知道 java Files.walkfiletree或类似东西的任何并行等价物?它可以是 Java或Scala库.

解决方法

我们假设在每个文件上执行回调就足够了.

这段代码不会处理文件系统中的循环 – 你需要一个注册表来表明你曾经去过的地方(例如java.util.concurrent.ConcurrentHashMap).您可以添加各种改进,例如报告异常而不是静忽略它们.

import java.io.File
import scala.util._
def walk(f: File,callback: File => Unit,pick: File => Boolean = _ => true) {
  Try {
    val (dirs,fs) = f.listFiles.partition(_.isDirectory)
    fs.filter(pick).foreach(callback)
    dirs.par.foreach(f => walk(f,callback,pick))
  }
}

使用折叠而不是使用foreach来收集文件并不是非常困难,但我将其作为练习留给读者. (ConcurrentLinkedQueue可能足够快,无论如何都要在回调中接受它们,除非你的线程非常慢并且文件系统很棒.)

原文地址:https://www.jb51.cc/java/126967.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐