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();
}
});
我在大学学习计算机科学,我被分配创建一个'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();
}
});