Java: 使用并行流复制文件

Java: Use parallel stream to copy files

我在大学学习计算机科学,我被分配创建一个'normal'程序,一个使用隐式并发的程序(并行流) 和使用显式并发的程序 (threadpool)

我使用 Java.NIO 库创建了一个批处理文件复制器(源到目标)。 我正在尝试弄清楚如何使用 并行流来完成。

我有一个包含文件 paths/names 的 字符串数组 ,然后我有这个循环以便将文件复制到目标:

int i = 0;
while (i < filelist.length){
    String filepath = filelist[i];
    Path source = Paths.get(filepath);
    Path target = Paths.get(FileBrowser.destinationpath+"/"+filenames[i]);  

    try {
        //replace existing file using java nio package
        System.out.println(Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING));
    } catch (IOException e) {
        e.printStackTrace();
    }
    i++;
}

如能提供有关如何使用并行流执行此操作的任何帮助,我们将不胜感激。

PS。我知道并行复制文件不会导致文件被复制得更快而不是顺序复制,因为这不是CPU问题,更多的是磁盘问题。无论哪种方式,这个作业都是为了测试和报告结果,所以这就是我选择这种方法的原因。

使用Java 8,您可以将任何列表作为并行流进行迭代。因此,使用您的代码,您可以执行以下操作:

Arrays.asList(filelist).parallelStream().forEach((filepath) -> {
    Path source = Paths.get(filepath);
    Path target = Paths.get(FileBrowser.destinationpath+"/"+filepath]);
    try {
        //replace existing file using java nio package
        System.out.println(Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING));
    } catch (IOException e) {
        e.printStackTrace();
    }
});