2017-02-11 124 views
0

我有一个结构,像这样:AWS S3 Java SDK的对象列表

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文件夹中的所有文件夹:so v20170522, v20170622, etc

这是我到目前为止有:

ListObjectsRequest listObjectsRequest = new ListObjectsRequest(); 
listObjectsRequest.setBucketName("common"); 
listObjectsRequest.setPrefix("test/"); 
listObjectsRequest.setDelimiter("/"); 

这将返回到我刚才是在common/test文件夹中的文件,而不是文件夹。当我删除分隔符时,我得到所有文件夹的所有子文件。有没有办法做到这一点?

+1

getCommonPrefixes()? – jarmod

+0

就是这样!谢谢! –

+0

太棒了,很高兴它有帮助。已添加作为一个更多的上下文的答案。 – jarmod

回答

2

重要的是要知道,S3不是一个普通的文件系统,并且列表操作与你期望的有些不同。

当调用listObjects,指定:

  • prefix这就限制了结果只以指定前缀
  • delimiter导致listObjects卷起共享一个共同的前缀为所有按键开始这些密钥单个汇总列表结果

您应该在返回的通用前缀中找到'文件夹',可通过getCommonPrefixes()访问。

欲了解更多信息,请参阅Listing Keys using Prefix and Delimiter