Java listObjects()没有给出s3中bucket中对象的完整列表

Java listObjects()没有给出s3中bucket中对象的完整列表,java,amazon-web-services,amazon-s3,Java,Amazon Web Services,Amazon S3,我正在尝试从AmazonS3获取bucket的公共前缀。我使用以下代码获取所有对象的列表: ObjectListing listing = s3Client.listObjects(new ListObjectsRequest().withBucketName(bucket).withPrefix("used/").withDelimiter("/")); for (String name : listing.getCommonPrefixes()) { System.out.prin

我正在尝试从AmazonS3获取bucket的公共前缀。我使用以下代码获取所有对象的列表:

ObjectListing listing = s3Client.listObjects(new ListObjectsRequest().withBucketName(bucket).withPrefix("used/").withDelimiter("/"));
for (String name : listing.getCommonPrefixes()) 
{
    System.out.println(name);
    objectNames.add(name);
}
System.out.println("\n\n\nSize: " + objectNames.size());

但它只是打印一些常见的前缀。有2000多个前缀,但它只打印950个。如何获取所有前缀?

您的ObjectList一次最多只能包含1000个对象。调用getCommonPrefixes时,它只返回这1000个对象的公共前缀。您需要检查ObjectList的isTruncated方法以确定是否有更多记录,然后使用getNextMarker方法以及后续的listObjects调用来获取剩余的对象记录以及这些对象的公共前缀。

您的ObjectList一次最多只包含1000个对象。调用getCommonPrefixes时,它只返回这1000个对象的公共前缀。您需要检查ObjectListing的isTruncated方法以确定是否有更多记录,然后使用getNextMarker方法以及后续的listObjects调用来获取剩余的对象记录以及这些对象的公用前缀。

您的意思是objectNames.size>2000但只打印950行吗?否,该存储桶中有2000多个键,但getCommonPrefixes仅提供950个键。您的意思是objectNames.size>2000但只打印950行吗?不,该存储桶中有2000多个键,但getCommonPrefixes仅提供950个键。在列出时包装代码。isTruncated完成了该任务。和listing=s3Client.listnextbatchofobjects列出带来了接下来的1000个前缀。在listing.isTruncated完成任务的同时包装代码。和listing=s3Client.listnextbatchofobjects列出了接下来的1000个前缀。