2017-02-11 150 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