使用Java将批量文件从一个s3文件夹移动到另一个s3文件夹

使用Java将批量文件从一个s3文件夹移动到另一个s3文件夹,java,spring-boot,aws-sdk,Java,Spring Boot,Aws Sdk,我在Spring批处理中有一个方法,它将文件从S3 bucket中的一个文件夹“移动”(复制和删除)到同一S3 bucket中的另一个文件夹。这种方法太费时了。有没有更好的办法 public void moveMultipleFiles(List<File> files, String bucket, String fromFolder, String toFolder) { files.forEach(file -> { StringB

我在Spring批处理中有一个方法,它将文件从S3 bucket中的一个文件夹“移动”(复制和删除)到同一S3 bucket中的另一个文件夹。这种方法太费时了。有没有更好的办法

public void moveMultipleFiles(List<File> files, String bucket, String fromFolder, String toFolder) {
        files.forEach(file -> {
            StringBuilder unProcessedFileName = new StringBuilder();
            unProcessedFileName.append(fromFolder);
            unProcessedFileName.append("/");
            unProcessedFileName.append(file.getName());

            StringBuilder processedFileName = new StringBuilder();
            processedFileName.append(toFolder);
            processedFileName.append("/");
            processedFileName.append(file.getName());

            CopyObjectRequest copyObjRequest = new CopyObjectRequest(bucket, unProcessedFileName.toString(), bucket,
                    processedFileName.toString());

            client.copyObject(copyObjRequest);
            client.deleteObject(new DeleteObjectRequest(bucket, unProcessedFileName.toString()));
        });
    }
public void movemultiplefile(列表文件、字符串bucket、字符串fromFolder、字符串toFolder){
files.forEach(文件->{
StringBuilder unProcessedFileName=新建StringBuilder();
未处理的文件名.append(fromFolder);
未处理的文件名。追加(“/”);
未处理的filename.append(file.getName());
StringBuilder processedFileName=新建StringBuilder();
processedFileName.append(toFolder);
processedFileName.append(“/”);
processedFileName.append(file.getName());
CopyObjectRequest CopyObjectRequest=新的CopyObjectRequest(bucket,unProcessedFileName.toString(),bucket,
processedFileName.toString());
copyObject(copyObjRequest);
deleteObject(新的DeleteObjectRequest(bucket,unProcessedFileName.toString());
});
}
上面的方法花费了很多时间,因为在每次批处理执行中,我都要移动1000多个文件。 我使用ExecutorService尝试了以下方法。但这是不正确的工作。(有时某些文件移动不正确)

public void moveFilesMultiple(列表文件、字符串bucket、字符串fromFolder、字符串toFolder){
ExecutorService ExecutorService=Executors.newFixedThreadPool(10);
executorService.execute(新的Runnable(){
公开募捐{
files.forEach(文件->{
//文件移动代码在这里
});
}
});
}

带有执行器的代码块似乎没有并行化任何东西。只执行一个命令并移动其中的所有文件。
public void moveFilesMultiple(List<File> files, String bucket, String fromFolder, String toFolder) {
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        executorService.execute(new Runnable() {
            public void run() {
                files.forEach(file -> {
                    // file move code here
                });
            }
        });
    }