从Java列表中的每个文件中获取文件名的一部分

时间:2018-11-28 04:59:05

标签: java amazon-s3

我正在使用uploadFileList()将列表中的文件上传到S3中 因此,此API将列表(记录)作为参数,如下所示

MultipleFileUpload xfer = tm.uploadFileList(bucketName, "TEST",new File(fileLocation), records);

这样的列表中的记录

21564_114762642_ANA_9ECB7C98-C2D7-428A-B6AD-7A6C62E1A7BE_App.xml.gz
21224_114762642_ANA_9ECB7C98-C2D7-428A-B6AD-7A6C62E1A7BE_App.xml.gz
20780_114762642_ANA_9ECB7C98-C2D7-428A-B6AD-7A6C62E1A7BE_App.xml.gz
20407_114762642_ANA_9ECB7C98-C2D7-428A-B6AD-7A6C62E1A7BE_App.xml.gz

到目前为止,此方法工作正常。 现在我需要在API中添加前缀,因为文件名的前四位,例如21564将是第一个文件的前缀 因此,要执行此操作,我必须遍历该列表并逐个文件添加文件,但是与上载列表相比,将使上载到S3的速度变慢。

将列表上传到S3时是否仍然要添加前缀,并且列表中的文件是随机的,但是模式是固定的?

1 个答案:

答案 0 :(得分:0)

请参阅有关object keys的S3文档。由于S3存储桶是扁平的(不是文件系统层次结构),因此您可以告诉Amazon要用于上传文件的密钥前缀,从而将它们全部分组在同一前缀下。例如,我可以提供“ MovieReviews /”作为文件列表的前缀,并且S3中的结果对象键将以此开头。一些工具可以理解斜线,并允许您将S3存储桶作为目录层次结构进行浏览。

在您的情况下,如果文件应使用前N个字符作为分组关键字,则可以根据该子字符串进行第一个分组,例如以fileList.stream().collect(Collectors.groupingBy(s -> s.substring(0, N)))