gpt4 book ai didi

java - "recursively"抓取S3子文件夹中的所有文件

转载 作者:行者123 更新时间:2023-12-05 01:00:00 25 4
gpt4 key购买 nike

我需要帮助来“递归”抓取 s3 中的文件:

例如,我有这样的 s3 结构:

My-bucket/2018/06/05/10/file1.json

My-bucket/2018/06/05/11/file2.json

My-bucket/2018/06/05/12/file3.json

My-bucket/2018/06/05/13/file5.json

My-bucket/2018/06/05/14/file4.json

My-bucket/2018/06/05/15/file6.json

我需要获取给定存储桶的文件名的所有文件路径:

我尝试了以下方法,但它对我不起作用(它返回的不是整个路径):

public  List<String> getObjectsListFromFolder4(String bucketName, String keyPrefix) {
List<String> paths = new ArrayList<String>();
String delimiter = "/";
if (keyPrefix != null && !keyPrefix.isEmpty() && !keyPrefix.endsWith(delimiter)) {
keyPrefix += delimiter;
}

ListObjectsRequest listObjectRequest = new ListObjectsRequest().withBucketName(bucketName)
.withPrefix(keyPrefix).withDelimiter(delimiter);

ObjectListing objectListing;
do {
objectListing = s3Client.listObjects(listObjectRequest);
paths.addAll(objectListing.getCommonPrefixes());
listObjectRequest.setMarker(objectListing.getNextMarker());
} while (objectListing.isTruncated());
return paths;
}

最佳答案

有一个新的实用程序类 - S3Objects - 它提供了一种在“foreach”语句中迭代 Amazon S3 对象的简单方法。使用它的 withPrefix 方法,然后迭代它们。您也可以使用过滤器和流。

这是一个例子(Kotlin):

val s3 = AmazonS3ClientBuilder
.standard()
.withCredentials(EnvironmentVariableCredentialsProvider())
.build()

S3Objects
.withPrefix(s3, bucket, folder)
.filter { s3ObjectSummary ->
s3ObjectSummary.key.endsWith(".gz")
}
.parallelStream()
.forEach { s3ObjectSummary ->
CSVParser.parse(
GZIPInputStream(s3.getObject(s3ObjectSummary.bucketName, s3ObjectSummary.key).objectContent),
StandardCharsets.UTF_8,
CSVFormat.DEFAULT
).use { csvParser ->

}
}

关于java - "recursively"抓取S3子文件夹中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50867701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com