使用Java将批量文件从一个s3文件夹移动到另一个s3文件夹
我在Spring批处理中有一个方法,它将文件从S3 bucket中的一个文件夹“移动”(复制和删除)到同一S3 bucket中的另一个文件夹。这种方法太费时了。有没有更好的办法使用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
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
});
}
});
}