仅列出s3存储桶中的子文件夹

时间:2013-02-01 19:34:50

标签: java amazon-web-services amazon-s3

我有一个s3结构如下:

s3bucketname -> List of first level keys -> List of second level keys -> List of third level keys -> Actual file.

我需要做的是,给定s3bucket的名称和第一级密钥的条目,我需要位于第一级密钥下的所有二级密钥的名称。因此,如果我们将其视为文件夹,我将获得root folder的名称s3bucketname以及其子文件夹subfolder1的名称,我想列出subfolder1内的所有文件夹。只是名字,而不是完整的路径。

有人可以指出如何使用amazon的java sdk在java中执行此操作吗?

由于

2 个答案:

答案 0 :(得分:35)

我做了以下代码似乎工作正常,您必须传递prefix并确保前缀以 / 结尾,并指定您想要获得的分隔符子目录列表。以下应该有效:

public List<String> listKeysInDirectory(String bucketName, String prefix) {
    String delimiter = "/";
    if (!prefix.endsWith(delimiter)) {
        prefix += delimiter;
    }

    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
            .withBucketName(bucketName).withPrefix(prefix)
            .withDelimiter(delimiter);
    ObjectListing objects = _client.listObjects(listObjectsRequest);
    return objects.getCommonPrefixes();
}

答案 1 :(得分:7)

查尔斯版超级简洁!谢谢@ charles-menguy

我写了一个扩展名,通过分页来支持巨大的列表。

if

http://www.lazywiz.com/uncategorized/s3-missing-api-list-sub-paths-in-the-s3-bucket/