我有一个结构:
common/test/v20170522/part-0001.snappy
common/test/v20170522/part-0002.snappy
common/test/v20170522/part-0003.snappy
common/test/v20170522/part-0004.snappy
common/test/v20170622/part-0001.snappy
common/test/v20170622/part-0002.snappy
common/test/v20170622/part-0003.snappy
common/test/v20170622/part-0004.snappy
还有更多版本文件夹,其中包含更多文件。我基本上想要test/common
文件夹中所有文件夹的列表:所以v20170522, v20170622, etc
。
这是我到目前为止所做的:
ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
listObjectsRequest.setBucketName("common");
listObjectsRequest.setPrefix("test/");
listObjectsRequest.setDelimiter("/");
这只返回common/test
文件夹中的文件,而不是文件夹。当我删除分隔符时,我得到所有文件夹的所有子文件。有没有办法做到这一点?
答案 0 :(得分:2)
重要的是要知道S3不是常规文件系统,并且列表操作的工作方式与您的预期不同。
调用listObjects时,指定:
prefix
将结果限制为仅以指定前缀delimiter
导致listObjects将共享共同前缀的所有键汇总到单个汇总列表结果中您应该在返回的公共前缀中找到“文件夹”,可以通过getCommonPrefixes()访问。