Wom*_*ode -1 java amazon-s3 amazon-web-services
我需要帮助以“递归”方式获取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
Run Code Online (Sandbox Code Playgroud)
我需要获取给定存储桶的所有文件名的文件路径:
我尝试了以下方法,但对我没有用(返回的不是完整路径):
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;
}
Run Code Online (Sandbox Code Playgroud)
有一个新的实用程序类,S3Objects
它提供了一种在“ foreach”语句中迭代Amazon S3对象的简便方法。使用其withPrefix
方法,然后对其进行迭代。您也可以使用过滤器和流。
这是一个示例(科特琳):
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 ->
…
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2555 次 |
最近记录: |