2017-02-11 4 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: 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.

Смежные вопросы