Кажется, я не понимаю, как это работает.
Допустим, у меня есть следующая структура:
s3:/bucket1/file1
s3:/bucket1/file2
s3:/bucket1/dir1/file3
s3:/bucket1/dir1/file4
Теперь, когда я хочу перечислить все содержимое (включая "каталоги", например, dir1) я могу сделать:
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName("bucket1")
.withPrefix("")
.withDelimiter("/");
return awsS3Client.listObjects(listObjectsRequest);
Здесь Objectsummaries содержит file1 и file2, общие префиксы содержат dir1
и для вывода содержимого / bucket1 / dir1 я мог бы сделать
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName("bucket1")
.withPrefix("dir1/")
.withDelimiter("/");
return awsS3Client.listObjects(listObjectsRequest);
Теперь, если я хочу проверить, существует ли какая-либо папка, я могу сделать:
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName("bucket1")
.withPrefix("dir1/")
.withDelimiter("/");
return awsS3Client.listObjects(listObjectsRequest).getObjectSummiaries().size() > 0;
Здесь я проверяю, был ли найден ровно один объект
, и я хотел проверить, существует ли какой-либо файл
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName("bucket1")
.withPrefix("file1")
.withDelimiter("/");
return awsS3Client.listObjects(listObjectRequest).getObjectSummaries().size() == 1
Но мой вопрос в том, чтобы имитировать каталог, мы помещаем в него объект с пустым содержимым и с "/" в конце, а это означает, что я могу иметь файл и каталог с одинаковым именем. В таком случае, как бы я отличил sh это?