如何使用Java的S3 Client列出S3存储桶中的所有目录?
列出S3存储桶下目录的解决方案
想要列出特定S3存储桶下的目录,但S3 Client默认返回的是对象而非目录,之前在谷歌上没找到可行方案,研究后整理出以下解决方法:
private static List<String> listDirectoryFromS3FS(URI baseURI) { UnderFsObjectMeta underFsObjectMeta = new UnderFsObjectMeta(baseURI); S3Client client = S3Client.builder().region(Region.US_EAST_1).build(); ListObjectsV2Request request = ListObjectsV2Request.builder().bucket(underFsObjectMeta.m_sBucketName) .prefix(underFsObjectMeta.m_sDirectoryPath).delimiter(Utility.PART_FILE_SEPARATOR).build(); List<CommonPrefix> prefixes = client.listObjectsV2(request).commonPrefixes(); List<String> listDirectories = new LinkedList<>(); for (CommonPrefix prefix:prefixes) { listDirectories.add(prefix.prefix()); } return listDirectories; }
核心逻辑说明
- 借助
ListObjectsV2Request,通过指定目标目录的prefix和路径分隔符delimiter,让S3返回对应路径下的所有子目录(以CommonPrefix集合形式) - 遍历
commonPrefixes()结果,即可提取所有目录路径
内容的提问来源于stack exchange,提问作者maya
相关产品推荐
相关产品推荐

