我正在大学学习计算机科学,我被指派创建一个'普通'程序,一个使用隐式并发(并行流)的程序和一个使用显式并发的程序(threadpool)
我使用 Java.NIO lib创建了一个批处理文件复制器(源到目标)。 我想弄清楚如何使用并行流来完成。
我有一个字符串数组,其中包含文件路径/名称,然后我有这个循环以便将文件复制到目标:
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问题而是更多的磁盘问题。无论哪种方式,这项任务都是为了测试和报告结果,这就是我选择这种方法的原因。
答案 0 :(得分:1)
使用Java 8,您可以将任何列表作为并行流进行迭代。因此,使用您的代码,您可以执行以下操作:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem Define constants here:
set "LOCATION=.."
set "PATTERN=*.txt"
set /A LIMIT=2
set /A COUNT=0
pushd "%LOCATION%" && (
for /R "." %%F in ("%PATTERN%") do (
set /A COUNT+=1
set "ITEM=%%~F"
setlocal EnableDelayedExpansion
for /F "tokens=1,* delims=|" %%S in ("!COUNT!|!ITEM!") do (
endlocal
set "ITEM[%%S]=%%T"
)
)
popd
)
if %COUNT% GTR %LIMIT% (
echo Cannot continue script, too many "%PATTERN%" files ^(%COUNT%^) encountered:
for /L %%F in (1,1,%COUNT%) do (
setlocal EnableDelayedExpansion
echo(!ITEM[%%F]!
endlocal
)
exit /B
)
rem Continue script here...
endlocal
exit /B