This topic describes how to list all objects in a bucket, a specified number of objects in a bucket, and objects whose names contain a specified prefix in a bucket.

Background information

You can call the GetBucket (ListObjects) or GetBucketV2 (ListObjectsV2) operation to list up to 1,000 objects in a bucket at a time. This operation provides several parameters to customize the output. For example, you can configure parameters to list objects from a specified start position, list objects and subdirectories in a specified directory, and list objects by page. The GetBucket (ListObjects) and GetBucketV2 (ListObjectsV2) operations are different in the following aspects:

  • By default, when you call the GetBucket (ListObjects) operation to list objects, the information about the bucket owner is included in the response.
  • When you call the GetBucketV2 (ListObjectsV2) operation to list objects, you can set the fetchOwner parameter to specify whether to include the information about the bucket owner in the response.
    Note If you want to list objects in a versioned bucket, we recommend that you call the GetBucketV2 (ListObjectsV2) operation.

The following tables describe the parameters that you can configure when you call the GetBucket (ListObjects) or GetBucketV2 (ListObjectsV2) operation to list objects.

  • Call GetBucket (ListObjects) to list objects

    You can call GetBucket (ListObjects) in one of the following formats:

    • ObjectListing listObjects(String bucketName): lists all objects in a bucket. By default, up to 100 objects can be listed by a single request.
    • ObjectListing listObjects(String bucketName, String prefix): lists objects whose names contain a specified prefix in a bucket. By default, up to 100 objects can be listed by a single request.
    • ObjectListing listObjects(ListObjectsRequest listObjectsRequest): lists objects with multiple conditions specified. You can use this format to list objects in a flexible manner.

    The following table describes the parameters that you can configure for the GetBucket (ListObjects) operation.

    Parameter Description Method
    objectSummaries The returned object metadata. List<OSSObjectSummary> getObjectSummaries()
    prefix The prefix that must be included in the names of returned objects. String getPrefix()
    delimiter The character that is used to group the returned objects by name. String getDelimiter()
    marker The position from which the list operation starts. String getMarker()
    maxKeys The maximum number of objects that can be listed each time. int getMaxKeys()
    nextMarker The position from which the next list operation starts. String getNextMarker()
    isTruncated Indicates whether the listed objects are truncated. Valid values:
    • false: All objects are listed without truncation.
    • true: Only part of the objects are listed.
    boolean isTruncated()
    commonPrefixes A set of substrings of object names. Objects whose names end with the delimiter and contain the same prefix are grouped as a single result element in commonPrefixes. List<String> getCommonPrefixes()
    encodingType The encoding type of the returned object names. String getEncodingType()
  • Call GetBucketV2 (ListObjectsV2) to list objects

    You can call GetBucketV2 (ListObjectsV2) in one of the following formats:

    • ListObjectsV2Result listObjectsV2(String bucketName): lists all objects in a bucket. By default, up to 100 objects can be listed by a single request.
    • ListObjectsV2Result listObjectsV2(String bucketName, String prefix): lists objects whose names contain a specified prefix in a bucket. By default, up to 100 objects can be listed by a single request.
    • ListObjectsV2Result listObjectsV2(ListObjectsRequest listObjectsRequest): lists objects with multiple conditions specified. You can use this format to list objects in a flexible manner.

    The following table describes the parameters that you can configure for the GetBucketV2 (ListObjectsV2) operation.

    Parameter Description Method
    objectSummaries The returned object metadata. List<OSSObjectSummary> getObjectSummaries()
    prefix The prefix that must be included in the names of returned objects. String getPrefix()
    delimiter The character that is used to group the returned objects by name. String getDelimiter()
    startAfter The position from which the list operation starts. String getStartAfter()
    maxKeys The maximum number of objects that can be listed each time. int getMaxKeys()
    continuationToken The continuationToken that is used in this list operation. String getContinuationToken()
    nextContinuationToken The continuationToken that is used in the next list operation. String getNextContinuationToken()
    isTruncated Indicates whether the listed objects are truncated. Valid values:
    • false: All objects are listed without truncation.
    • true: Only part of the objects are listed.
    boolean isTruncated()
    commonPrefixes A set of substrings of object names. Objects whose names end with the delimiter and contain the same prefix are grouped as a single result element in commonPrefixes. List<String> getCommonPrefixes()
    encodingType The encoding type of the returned object names. String getEncodingType()
    fetchOwner Specifies whether to include the object owner information in the response. Valid values:
    • true: The response includes the owner information.
    • false: The response does not include the owner information.
    String getFetchOwner()

Simple list

You can call GetBucket (ListObjects) or GetBucketV2 (ListObjectsV2) to list objects in a specified bucket.

  • Call GetBucket (ListObjects) to list objects

    The following code provides an example on how to call GetBucket (ListObjects) to list objects in a specified bucket. By default, 100 objects are listed by a request.

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in Object Storage Service (OSS) is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the prefix that must be included in the names of objects to list. Example: exampledir/object. 
            String keyPrefix = "exampledir/object";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                // List objects. If you do not specify keyPrefix, all objects in the bucket are listed. If you specify keyPrefix, the objects whose names contain the specified prefix are listed. 
                ObjectListing objectListing = ossClient.listObjects(bucketName, keyPrefix);
                List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
                for (OSSObjectSummary s : sums) {
                    System.out.println("\t" + s.getKey());
                }
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }                  
  • Call GetBucketV2 (ListObjectsV2) to list objects

    The following code provides an example on how to call GetBucketV2 (ListObjectsV2) to list objects in a specified bucket. By default, 100 objects are listed by a request.

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the prefix that must be included in the names of objects to list. Example: exampledir/object. 
            String keyPrefix = "exampledir/object";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                // List objects. If you do not specify keyPrefix, all objects in the bucket are listed. If you specify keyPrefix, the objects whose names contain the specified prefix are listed. 
                ListObjectsV2Result result = ossClient.listObjectsV2(bucketName, keyPrefix);
                List<OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();
    
                for (OSSObjectSummary s : ossObjectSummaries) {
                    System.out.println("\t" + s.getKey());
                }
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

Call ListObjectsRequest to list objects

You can configure parameters for the ListObjectsRequest operation to list objects in a flexible manner. The following table describes the parameters that you can configure for the ListObjectsRequest operation.

Parameter Description Method
prefix The prefix that must be included in the names of returned objects. For information about how to use this parameter, see List objects whose names contain a specified prefix. setPrefix(String prefix)
delimiter The character that is used to group the returned objects by name. Objects whose names contain the same string that ranges from the specified prefix to the next occurrence of the delimiter are grouped as a single result element in commonPrefixes. For information about how to use this parameter, see List objects and subdirectories in the specified directory. setDelimiter(String delimiter)
marker The position from which the list operation starts. Objects whose names are alphabetically after the value of marker are listed. For information about how to use this parameter, see List objects whose names are alphabetically after the object specified by marker. setMarker(String marker)
maxKeys The maximum number of objects that can be listed at a time. After you specify this parameter, objects are listed in alphabetical order. Maximum value: 1000. Default value: 100. For information about how to use this parameter, see List all objects in a bucket by page. setMaxKeys(Integer maxKeys)
encodingType The encoding type of the object names in the response. Only URL encoding is supported. For information about how to use this parameter, see List objects and specify the encoding type of the object names. setEncodingType(String encodingType)
  • List a specified number of objects

    The following code provides an example on how to list a specified number of objects:

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args){
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                // Specify the maximum number of objects that can be listed each time. 
                final int maxKeys = 200;
                // List objects. 
                ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withMaxKeys(maxKeys));
                List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
                for (OSSObjectSummary s : sums) {
                    System.out.println("\t" + s.getKey());
                }
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }                    
  • List objects whose names contain a specified prefix

    The following code provides an example on how to list objects whose names contain a specified prefix:

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args){
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the prefix that must be included in the names of objects to list. Example: exampledir/object. 
            String keyPrefix = "exampledir/object";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                // List objects whose names contain the specified prefix. By default, 100 objects are listed. 
                ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withPrefix(keyPrefix));
                List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
                for (OSSObjectSummary s : sums) {
                    System.out.println("\t" + s.getKey());
                }
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }                    
  • List objects whose names are alphabetically after the object specified by marker

    You can configure the marker parameter to specify the name of the object after which the list operation starts. The following code provides an example on how to list objects whose names are alphabetically after the object specified by marker:

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args){
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the marker parameter. Example: exampleobject.txt. 
            String marker = "exampleobject.txt";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                // List objects whose names are alphabetically after the object specified by marker. By default, 100 objects are listed. 
                ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withMarker(marker));
                List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
                for (OSSObjectSummary s : sums) {
                    System.out.println("\t" + s.getKey());
                }
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • List all objects in a bucket by page

    The following code provides an example on how to list all objects in a specified bucket by page. You can set maxKeys to specify the maximum number of objects that can be listed on each page.

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args){
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Set maxKeys to 200. 
            int maxKeys = 200;
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                String nextMarker = null;
                ObjectListing objectListing;
    
                do {
                    objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withMarker(nextMarker).withMaxKeys(maxKeys));
    
                    List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
                    for (OSSObjectSummary s : sums) {
                        System.out.println("\t" + s.getKey());
                    }
    
                    nextMarker = objectListing.getNextMarker();
    
                } while (objectListing.isTruncated());
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • List objects whose names contain a specified prefix by page

    The following code provides an example on how to list objects whose names contain a specified prefix by page:

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args){
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify that up to 200 objects can be listed on each page. 
            int maxKeys = 200;
            // Specify the prefix that must be included in the names of objects to list. Example: exampledir/object. 
            String keyPrefix = "exampledir/object";
            // Specify the marker parameter. Example: objecttest.txt. 
            String nextMarker = "objecttest.txt";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                ObjectListing objectListing;
    
                do {
                    objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).
                            withPrefix(keyPrefix).withMarker(nextMarker).withMaxKeys(maxKeys));
    
                    List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
                    for (OSSObjectSummary s : sums) {
                        System.out.println("\t" + s.getKey());
                    }
    
                    nextMarker = objectListing.getNextMarker();
    
                } while (objectListing.isTruncated());
    
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • List objects and specify the encoding type of the object names

    An object name that contains one of the following special characters must be encoded before the object is transmitted. OSS supports only URL encoding.

    • Single quotation marks (')
    • Double quotations marks (")
    • Ampersands (&)
    • Angle brackets (<>)
    • Pause markers (、)
    • Chinese characters

    The following code provides an example on how to list objects and specify the encoding type of the object names:

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.net.URLDecoder;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify that up to 200 objects can be listed on each page. 
            int maxKeys = 200;
            // Specify the prefix that must be included in the names of objects to list. Example: exampledir/object. 
            String keyPrefix = "exampledir/object";
            // Specify the marker parameter. Example: objecttest.txt. 
            String nextMarker = "objecttest.txt";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                ObjectListing objectListing;
    
                do {
                    ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
                    listObjectsRequest.setPrefix(keyPrefix);
                    listObjectsRequest.setMaxKeys(maxKeys);
                    listObjectsRequest.setMarker(nextMarker);
    
                    // Specify the encoding type of the object names. 
                    listObjectsRequest.setEncodingType("url");
    
                    objectListing = ossClient.listObjects(listObjectsRequest);
    
                    // Decode the value of Key in the response. 
                    for (OSSObjectSummary objectSummary: objectListing.getObjectSummaries()) {
                        System.out.println("Key:" + URLDecoder.decode(objectSummary.getKey(), "UTF-8"));
                    }
    
                    // Decode the value of commonPrefixes in the response. 
                    for (String commonPrefixes: objectListing.getCommonPrefixes()) {
                        System.out.println("CommonPrefixes:" + URLDecoder.decode(commonPrefixes, "UTF-8"));
                    }
    
                    // Decode the value of nextMarker in the response. 
                    if (objectListing.getNextMarker() != null) {
                        nextMarker = URLDecoder.decode(objectListing.getNextMarker(), "UTF-8");
                    }
                } while (objectListing.isTruncated());
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

Call ListObjectsV2Request to list objects

You can configure the parameters for the ListObjectsV2Request operation to list objects in a flexible manner. For example, you can list a specified number of objects, objects whose names contain a specified prefix, or all objects in a bucket by page.

The following table describes the parameters that you can configure for the ListObjectsV2Request operation.

Parameter Description Method
prefix The prefix that must be included in the names of returned objects. For information about how to use this parameter, see List objects whose names contain a specified prefix. setPrefix(String prefix)
delimiter The character that is used to group the returned objects by name. Objects whose names contain the same string that ranges from the specified prefix to the next occurrence of the delimiter are grouped as a single result element in commonPrefixes. For information about how to use this parameter, see List objects and subdirectories in the specified directory. setDelimiter(String delimiter)
maxKeys The maximum number of objects that can be listed at a time. After you specify this parameter, objects are listed in alphabetical order. Maximum value: 1000. Default value: 100. For information about how to use this parameter, see List all objects in a bucket by page. setMaxKeys(Integer maxKeys)
startAfter The position from which the list operation starts. Objects whose names are alphabetically after the value of startAfter are listed. For information about how to use this parameter, see List objects whose names are alphabetically after the object specified by startAfter. setStartAfter(String startAfter)
continuationToken The continuationToken that is used in this list operation. For information about how to use this parameter, see List all objects in a bucket by page. setContinuationToken(String continuationToken)
encodingType The encoding type of the object names in the response. Only URL encoding is supported. For information about how to use this parameter, see List objects and specify the encoding type of the object names. setEncodingType(String encodingType)
fetchOwner Specifies whether to include the object owner information in the response. For information about how to use this parameter, see List objects and their owner information. setFetchOwner(boolean fetchOwner )
  • List a specified number of objects

    The following code provides an example on how to list a specified number of objects:

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the maximum number of objects that can be listed each time. 
            int maxKeys = 200;
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                // List objects. By default, 100 objects are returned by a single request. In this example, up to 200 objects can be returned each time. 
                ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
                listObjectsV2Request.setMaxKeys(maxKeys);
                ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
                List<OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();
    
                for (OSSObjectSummary s : ossObjectSummaries) {
                    System.out.println("\t" + s.getKey());
                }
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • List objects whose names contain a specified prefix

    The following code provides an example on how to list objects whose names contain a specified prefix:

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the prefix that must be included in the names of objects to list. Example: exampledir/object. 
            String prefix = "exampledir/object";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                // List objects whose names contain the specified prefix. 
                ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
                listObjectsV2Request.setPrefix(prefix);
                ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
                List<OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();
    
                for (OSSObjectSummary s : ossObjectSummaries) {
                    System.out.println("\t" + s.getKey());
                }
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • List objects whose names are alphabetically after the object specified by startAfter

    The following code provides an example on how to list objects whose names are alphabetically after the object specified by startAfter:

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                // List objects whose names are alphabetically after the object specified by startAfter. The value of startAfter can be the name of an existing object or other strings. 
                // For example, if you set startAfter to test-obj, objects whose names are alphabetically after the test-obj string are returned. The object named test-obj is not listed even if it exists in the bucket. 
                ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
                listObjectsV2Request.setStartAfter("test-obj");
                ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
                List<OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();
    
                for (OSSObjectSummary s : ossObjectSummaries) {
                    System.out.println("\t" + s.getKey());
                }
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • List objects and their owner information

    The following code provides an example on how to list objects and their owner information:

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                // By default, the owner information of the objects is not listed. To include the object owner information in the response, set the fetchOwner parameter to true. 
                ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
                listObjectsV2Request.setFetchOwner(true);
                ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
                List<OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();
    
                for (OSSObjectSummary s : ossObjectSummaries) {
                    System.out.println("\t" + s.getKey());
                    if (s.getOwner() != null) {
                        System.out.println("owner id:" + s.getOwner().getId());
                        System.out.println("name:" + s.getOwner().getDisplayName());
                    }
                }
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • List all objects in a bucket by page

    The following code provides an example on how to list all objects in a specified bucket by page. You can set maxKeys to specify the maximum number of objects that can be listed on each page.

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the maximum number of objects that can be listed each time. 
            int maxKeys = 200;
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                String nextContinuationToken = null;
                ListObjectsV2Result result = null;
    
                // List objects by page by using the nextContinuationToken parameter included in the response of the previous list operation. 
                do {
                    ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName).withMaxKeys(maxKeys);
                    listObjectsV2Request.setContinuationToken(nextContinuationToken);
                    result = ossClient.listObjectsV2(listObjectsV2Request);
    
                    List<OSSObjectSummary> sums = result.getObjectSummaries();
                    for (OSSObjectSummary s : sums) {
                        System.out.println("\t" + s.getKey());
                    }
    
                    nextContinuationToken = result.getNextContinuationToken();
    
                } while (result.isTruncated());
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • List objects whose names contain a specified prefix by page

    The following code provides an example on how to list objects whose names contain a specified prefix by page:

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the prefix that must be included in the names of objects to list. Example: exampledir/object. 
            String keyPrefix = "exampledir/object";
            // Specify the maximum number of objects that can be listed each time. 
            int maxKeys = 200;
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                String nextContinuationToken = null;
                ListObjectsV2Result result = null;
    
                // List the objects whose names contain the specified prefix by page. 
                do {
                    ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName).withMaxKeys(maxKeys);
                    listObjectsV2Request.setPrefix(keyPrefix);
                    listObjectsV2Request.setContinuationToken(nextContinuationToken);
                    result = ossClient.listObjectsV2(listObjectsV2Request);
    
                    List<OSSObjectSummary> sums = result.getObjectSummaries();
                    for (OSSObjectSummary s : sums) {
                        System.out.println("\t" + s.getKey());
                    }
    
                    nextContinuationToken = result.getNextContinuationToken();
    
                } while (result.isTruncated());
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • List objects and specify the encoding type of the object names

    The following code provides an example on how to list objects and specify the encoding type of the object names:

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.net.URLDecoder;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the bucket name. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the prefix that must be included in the names of objects to list. Example: exampledir/object. 
            String keyPrefix = "exampledir/object";
            // Specify the maximum number of objects that can be listed each time. 
            int maxKeys = 200;
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                String nextContinuationToken = null;
                ListObjectsV2Result result = null;
    
                // Specify that the returned results are URL-encoded. In this case, you must decode the values of the prefix, delimiter, startAfter, key, and commonPrefix parameters in the response. 
                do {
                    ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName).withMaxKeys(maxKeys);
                    listObjectsV2Request.setPrefix(keyPrefix);
                    listObjectsV2Request.setEncodingType("url");
                    listObjectsV2Request.setContinuationToken(nextContinuationToken);
                    result = ossClient.listObjectsV2(listObjectsV2Request);
    
                    // Decode the value of prefix in the response. 
                    if (result.getPrefix() != null) {
                        String prefix = URLDecoder.decode(result.getPrefix(), "UTF-8");
                        System.out.println("prefix: " + prefix);
                    }
    
                    // Decode the value of delimiter in the response. 
                    if (result.getDelimiter() != null) {
                        String delimiter = URLDecoder.decode(result.getDelimiter(), "UTF-8");
                        System.out.println("delimiter: " + delimiter);
                    }
    
                    // Decode the value of startAfter in the response. 
                    if (result.getStartAfter() != null) {
                        String startAfter = URLDecoder.decode(result.getStartAfter(), "UTF-8");
                        System.out.println("startAfter: " + startAfter);
                    }
    
                    // Decode the value of key in the response. 
                    for (OSSObjectSummary s : result.getObjectSummaries()) {
                        String decodedKey = URLDecoder.decode(s.getKey(), "UTF-8");
                        System.out.println("key: " + decodedKey);
                    }
    
                    // Decode the value of commonPrefixes in the response. 
                    for (String commonPrefix: result.getCommonPrefixes()) {
                        String decodeCommonPrefix = URLDecoder.decode(commonPrefix, "UTF-8");
                        System.out.println("CommonPrefix:" + decodeCommonPrefix);
                    }
    
                    nextContinuationToken = result.getNextContinuationToken();
    
                } while (result.isTruncated());
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

List objects by directory

OSS uses a flat structure for objects instead of a hierarchical structure to store objects. A directory is an object whose size is 0 and whose name ends with a forward slash (/). You can upload and download this object. By default, objects whose names end with a forward slash (/) are displayed as directories in the OSS console. For the complete sample code that is used to create directories, visit GitHub.

You can specify the delimiter and prefix parameters to list objects by directory.

  • If you set prefix to a directory name in the request, objects and subdirectories whose names contain the prefix are listed.
  • If you also set delimiter to a forward slash (/) in the request, the objects and subdirectories whose names start with the specified prefix in the directory are listed. Each subdirectory is listed as a single result element in commonPrefixes. The objects and directories in these subdirectories are not listed.

Example: The following four objects are stored in a bucket: oss.jpg, fun/test.jpg, fun/movie/001.avi, and fun/movie/007.avi. The forward slash (/) is specified as the directory delimiter. The following code provides examples on how to list objects by directory.

  • List all objects in a bucket
    • The following code provides an example on how to call GetBucket (ListObjects) to list all objects in a bucket:
      import com.aliyun.oss.ClientException;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.OSSException;
      import com.aliyun.oss.model.*;
      
      public class Demo {
          public static void main(String[] args) throws Exception {
              // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
              String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
              // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
              String accessKeyId = "yourAccessKeyId";
              String accessKeySecret = "yourAccessKeySecret";
              // Specify the bucket name. Example: examplebucket. 
              String bucketName = "examplebucket";
      
              // Create an OSSClient instance. 
              OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
      
              try {
                  // Create a request to list objects. 
                  ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
      
                  // List objects. 
                  ObjectListing listing = ossClient.listObjects(listObjectsRequest);
      
                  // Traverse all objects. 
                  System.out.println("Objects:");
                  for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
                      System.out.println(objectSummary.getKey());
                  }
      
                  // Traverse all commonPrefix elements. 
                  System.out.println("CommonPrefixes:");
                  for (String commonPrefix : listing.getCommonPrefixes()) {
                      System.out.println(commonPrefix);
                  }
              } catch (OSSException oe) {
                  System.out.println("Caught an OSSException, which means your request made it to OSS, "
                          + "but was rejected with an error response for some reason.");
                  System.out.println("Error Message:" + oe.getErrorMessage());
                  System.out.println("Error Code:" + oe.getErrorCode());
                  System.out.println("Request ID:" + oe.getRequestId());
                  System.out.println("Host ID:" + oe.getHostId());
              } catch (ClientException ce) {
                  System.out.println("Caught an ClientException, which means the client encountered "
                          + "a serious internal problem while trying to communicate with OSS, "
                          + "such as not being able to access the network.");
                  System.out.println("Error Message:" + ce.getMessage());
              } finally {
                  if (ossClient != null) {
                      ossClient.shutdown();
                  }
              }
          }
      }
    • The following code provides an example on how to call GetBucketV2 (ListObjectsV2) to list all objects in a specified bucket:
      import com.aliyun.oss.ClientException;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.OSSException;
      import com.aliyun.oss.model.*;
      
      public class Demo {
          public static void main(String[] args) throws Exception {
              // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
              String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
              // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
              String accessKeyId = "yourAccessKeyId";
              String accessKeySecret = "yourAccessKeySecret";
              // Specify the bucket name. Example: examplebucket. 
              String bucketName = "examplebucket";
      
              // Create an OSSClient instance. 
              OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
      
              try {
                  // List objects. 
                  ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
                  ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
      
                  // Traverse all objects. 
                  System.out.println("Objects:");
                  for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
                      System.out.println(objectSummary.getKey());
                  }
      
                  // Traverse all commonPrefix elements. 
                  System.out.println("CommonPrefixes:");
                  for (String commonPrefix : result.getCommonPrefixes()) {
                      System.out.println(commonPrefix);
                  }
              } catch (OSSException oe) {
                  System.out.println("Caught an OSSException, which means your request made it to OSS, "
                          + "but was rejected with an error response for some reason.");
                  System.out.println("Error Message:" + oe.getErrorMessage());
                  System.out.println("Error Code:" + oe.getErrorCode());
                  System.out.println("Request ID:" + oe.getRequestId());
                  System.out.println("Host ID:" + oe.getHostId());
              } catch (ClientException ce) {
                  System.out.println("Caught an ClientException, which means the client encountered "
                          + "a serious internal problem while trying to communicate with OSS, "
                          + "such as not being able to access the network.");
                  System.out.println("Error Message:" + ce.getMessage());
              } finally {
                  if (ossClient != null) {
                      ossClient.shutdown();
                  }
              }
          }
      }
    • Returned results

      The following response is returned when you call the preceding two operations to list all objects in the bucket:

      Objects:
      fun/movie/001.avi
      fun/movie/007.avi
      fun/test.jpg
      oss.jpg
      CommonPrefixes:                    
  • List all objects in a specified directory
    • The following code provides an example on how to call GetBucket (ListObjects) to list all objects in a specified directory:
      import com.aliyun.oss.ClientException;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.OSSException;
      import com.aliyun.oss.model.*;
      
      public class Demo {
          public static void main(String[] args) throws Exception {
              // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
              String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
              // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
              String accessKeyId = "yourAccessKeyId";
              String accessKeySecret = "yourAccessKeySecret";
              // Specify the bucket name. Example: examplebucket. 
              String bucketName = "examplebucket";
      
              // Create an OSSClient instance. 
              OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
      
              try {
                  // Create a request to list objects. 
                  ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
                  // Set prefix to fun/ to list all objects in the fun/ directory. 
                  listObjectsRequest.setPrefix("fun/");
      
                  // Lists all objects in the fun/ directory. 
                  ObjectListing listing = ossClient.listObjects(listObjectsRequest);
      
                  // Traverse all objects. 
                  System.out.println("Objects:");
                  for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
                      System.out.println(objectSummary.getKey());
                  }
      
                  // Traverse all commonPrefix elements. 
                  System.out.println("\nCommonPrefixes:");
                  for (String commonPrefix : listing.getCommonPrefixes()) {
                      System.out.println(commonPrefix);
                  }
              } catch (OSSException oe) {
                  System.out.println("Caught an OSSException, which means your request made it to OSS, "
                          + "but was rejected with an error response for some reason.");
                  System.out.println("Error Message:" + oe.getErrorMessage());
                  System.out.println("Error Code:" + oe.getErrorCode());
                  System.out.println("Request ID:" + oe.getRequestId());
                  System.out.println("Host ID:" + oe.getHostId());
              } catch (ClientException ce) {
                  System.out.println("Caught an ClientException, which means the client encountered "
                          + "a serious internal problem while trying to communicate with OSS, "
                          + "such as not being able to access the network.");
                  System.out.println("Error Message:" + ce.getMessage());
              } finally {
                  if (ossClient != null) {
                      ossClient.shutdown();
                  }
              }
          }
      }
    • The following code provides an example on how to call GetBucketV2 (ListObjectsV2) to list all objects in a directory:
      import com.aliyun.oss.ClientException;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.OSSException;
      import com.aliyun.oss.model.*;
      
      public class Demo {
          public static void main(String[] args) throws Exception {
              // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
              String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
              // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
              String accessKeyId = "yourAccessKeyId";
              String accessKeySecret = "yourAccessKeySecret";
              // Specify the bucket name. Example: examplebucket. 
              String bucketName = "examplebucket";
      
              // Create an OSSClient instance. 
              OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
      
              try {
                  // Create a request to list objects. 
                  ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
      
                  // Set prefix to fun/ to list all objects in the fun/ directory. 
                  listObjectsV2Request.setPrefix("fun/");
      
                  // Initiate a list request. 
                  ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
      
                  // Traverse all objects. 
                  System.out.println("Objects:");
                  for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
                      System.out.println(objectSummary.getKey());
                  }
      
                  // Traverse all commonPrefix elements. 
                  System.out.println("\nCommonPrefixes:");
                  for (String commonPrefix : result.getCommonPrefixes()) {
                      System.out.println(commonPrefix);
                  }
              } catch (OSSException oe) {
                  System.out.println("Caught an OSSException, which means your request made it to OSS, "
                          + "but was rejected with an error response for some reason.");
                  System.out.println("Error Message:" + oe.getErrorMessage());
                  System.out.println("Error Code:" + oe.getErrorCode());
                  System.out.println("Request ID:" + oe.getRequestId());
                  System.out.println("Host ID:" + oe.getHostId());
              } catch (ClientException ce) {
                  System.out.println("Caught an ClientException, which means the client encountered "
                          + "a serious internal problem while trying to communicate with OSS, "
                          + "such as not being able to access the network.");
                  System.out.println("Error Message:" + ce.getMessage());
              } finally {
                  if (ossClient != null) {
                      ossClient.shutdown();
                  }
              }
          }
      }
    • The following response is returned when you call the preceding two operations to list all objects in the specified directory:
      Objects:
      fun/movie/001.avi
      fun/movie/007.avi
      fun/test.jpg
      CommonPrefixes:                    
  • List objects and subdirectories in the specified directory
    • The following code provides an example on how to call GetBucket (ListObjects) to list objects and subdirectories in a directory:
      import com.aliyun.oss.ClientException;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.OSSException;
      import com.aliyun.oss.model.*;
      
      public class Demo {
          public static void main(String[] args) throws Exception {
              // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
              String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
              // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
              String accessKeyId = "yourAccessKeyId";
              String accessKeySecret = "yourAccessKeySecret";
              // Specify the bucket name. Example: examplebucket. 
              String bucketName = "examplebucket";
      
              // Create an OSSClient instance. 
              OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
      
              try {
                  // Create a request to list objects. 
                  ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
      
                  // Set delimiter to a forward slash (/). 
                  listObjectsRequest.setDelimiter("/");
      
                  // List all objects and subdirectories in the fun/ directory. 
                  listObjectsRequest.setPrefix("fun/");
      
                  ObjectListing listing = ossClient.listObjects(listObjectsRequest);
      
                  // Traverse all objects. 
                  System.out.println("Objects:");
                  // In the response, objectSummaries lists the objects in the fun/ directory. 
                  for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
                      System.out.println(objectSummary.getKey());
                  }
      
                  // Traverse all commonPrefix elements. 
                  System.out.println("\nCommonPrefixes:");
                  // CommonPrefixs lists all subdirectories in the fun/ directory. The fun/movie/001.avi and fun/movie/007.avi objects are not listed because they are in the movie subdirectory of the fun/ directory. 
                  for (String commonPrefix : listing.getCommonPrefixes()) {
                      System.out.println(commonPrefix);
                  }
              } catch (OSSException oe) {
                  System.out.println("Caught an OSSException, which means your request made it to OSS, "
                          + "but was rejected with an error response for some reason.");
                  System.out.println("Error Message:" + oe.getErrorMessage());
                  System.out.println("Error Code:" + oe.getErrorCode());
                  System.out.println("Request ID:" + oe.getRequestId());
                  System.out.println("Host ID:" + oe.getHostId());
              } catch (ClientException ce) {
                  System.out.println("Caught an ClientException, which means the client encountered "
                          + "a serious internal problem while trying to communicate with OSS, "
                          + "such as not being able to access the network.");
                  System.out.println("Error Message:" + ce.getMessage());
              } finally {
                  if (ossClient != null) {
                      ossClient.shutdown();
                  }
              }
          }
      }
    • The following code provides an example on how to call GetBucketV2 (ListObjectsV2) to list objects and subdirectories in a directory:
      import com.aliyun.oss.ClientException;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.OSSException;
      import com.aliyun.oss.model.*;
      
      public class Demo {
          public static void main(String[] args) throws Exception {
              // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
              String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
              // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
              String accessKeyId = "yourAccessKeyId";
              String accessKeySecret = "yourAccessKeySecret";
              // Specify the bucket name. Example: examplebucket. 
              String bucketName = "examplebucket";
      
              // Create an OSSClient instance. 
              OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
      
              try {
                  // Create a request to list objects. 
                  ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
      
                  // Set prefix to fun/ to list all objects and subdirectories in the fun/ directory. 
                  listObjectsV2Request.setPrefix("fun/");
      
                  // Set delimiter to a forward slash (/). 
                  listObjectsV2Request.setDelimiter("/");
      
                  // Initiate a list request. 
                  ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
      
                  // Traverse all objects. 
                  System.out.println("Objects:");
                  // In the response, objectSummaries lists the objects in the fun/ directory. 
                  for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
                      System.out.println(objectSummary.getKey());
                  }
      
                  // Traverse all commonPrefix elements. 
                  System.out.println("\nCommonPrefixes:");
                  // CommonPrefixs lists all subdirectories in the fun/ directory. The fun/movie/001.avi and fun/movie/007.avi objects are not listed because they are in the movie subdirectory of the fun/ directory. 
                  for (String commonPrefix : result.getCommonPrefixes()) {
                      System.out.println(commonPrefix);
                  }
              } catch (OSSException oe) {
                  System.out.println("Caught an OSSException, which means your request made it to OSS, "
                          + "but was rejected with an error response for some reason.");
                  System.out.println("Error Message:" + oe.getErrorMessage());
                  System.out.println("Error Code:" + oe.getErrorCode());
                  System.out.println("Request ID:" + oe.getRequestId());
                  System.out.println("Host ID:" + oe.getHostId());
              } catch (ClientException ce) {
                  System.out.println("Caught an ClientException, which means the client encountered "
                          + "a serious internal problem while trying to communicate with OSS, "
                          + "such as not being able to access the network.");
                  System.out.println("Error Message:" + ce.getMessage());
              } finally {
                  if (ossClient != null) {
                      ossClient.shutdown();
                  }
              }
          }
      }
    • The following response is returned when you call the preceding two operations to list objects and subdirectories in the specified directory:
      Objects:
      fun/test.jpg
      
      CommonPrefixes:
      fun/movie/                    
  • Obtain the sizes of objects in the specified directory
    • The following code provides an example on how to call GetBucket (ListObjects) to obtain the sizes of objects in a specified directory:
      import com.aliyun.oss.ClientException;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.OSSException;
      import com.aliyun.oss.model.*;
      import java.util.List;
      
      public class Demo {
          public static void main(String[] args) throws Exception {
              // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
              String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
              // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
              String accessKeyId = "yourAccessKeyId";
              String accessKeySecret = "yourAccessKeySecret";
              // Specify the bucket name. Example: examplebucket. 
              String bucketName = "examplebucket";
              // Specify the prefix that must be included in the names of objects to list. Example: exampledir/object. If you want to traverse the sizes of objects and directories within the root directory, leave this parameter empty. 
              String keyPrefix = "exampledir/object";
      
              // Create an OSSClient instance. 
              OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
      
              try {
                  ObjectListing objectListing = null;
                  do {
                      // By default, 100 objects or directories are listed each time. 
                      ListObjectsRequest request = new ListObjectsRequest(bucketName).withDelimiter("/").withPrefix(keyPrefix);
                      if (objectListing != null) {
                          request.setMarker(objectListing.getNextMarker());
                      }
                      objectListing = ossClient.listObjects(request);
                      List<String> folders = objectListing.getCommonPrefixes();
                      for (String folder : folders) {
                          System.out.println(folder + " : " + (calculateFolderLength(ossClient, bucketName, folder) / 1024) + "KB");
                      }
                      List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
                      for (OSSObjectSummary s : sums) {
                          System.out.println(s.getKey() + " : " + (s.getSize() / 1024) + "KB");
                      }
                  } while (objectListing.isTruncated());
              } catch (OSSException oe) {
                  System.out.println("Caught an OSSException, which means your request made it to OSS, "
                          + "but was rejected with an error response for some reason.");
                  System.out.println("Error Message:" + oe.getErrorMessage());
                  System.out.println("Error Code:" + oe.getErrorCode());
                  System.out.println("Request ID:" + oe.getRequestId());
                  System.out.println("Host ID:" + oe.getHostId());
              } catch (ClientException ce) {
                  System.out.println("Caught an ClientException, which means the client encountered "
                          + "a serious internal problem while trying to communicate with OSS, "
                          + "such as not being able to access the network.");
                  System.out.println("Error Message:" + ce.getMessage());
              } finally {
                  if (ossClient != null) {
                      ossClient.shutdown();
                  }
              }
          }
      
          // Query the sizes of objects within a specified directory in a bucket. 
          private static long calculateFolderLength(OSS ossClient, String bucketName, String folder) {
              long size = 0L;
              ObjectListing objectListing = null;
              do {
                  // The default value of maxKeys is 100. The maximum value of maxKeys is 1000. 
                  ListObjectsRequest request = new ListObjectsRequest(bucketName).withPrefix(folder).withMaxKeys(1000);
                  if (objectListing != null) {
                      request.setMarker(objectListing.getNextMarker());
                  }
                  objectListing = ossClient.listObjects(request);
                  List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
                  for (OSSObjectSummary s : sums) {
                      size += s.getSize();
                  }
              } while (objectListing.isTruncated());
              return size;
          }
      }
    • The following code provides an example on how to call GetBucketV2 (ListObjectsV2) to query the sizes of objects in a specified directory:
      import com.aliyun.oss.ClientException;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.OSSException;
      import com.aliyun.oss.model.*;
      import java.util.List;
      
      public class Demo {
          public static void main(String[] args) throws Exception {
              // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
              String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
              // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
              String accessKeyId = "yourAccessKeyId";
              String accessKeySecret = "yourAccessKeySecret";
              // Specify the bucket name. Example: examplebucket. 
              String bucketName = "examplebucket";
              // Specify the prefix that must be included in the names of objects to list. Example: exampledir/object. If you want to traverse the sizes of objects and directories within the root directory, leave this parameter empty. 
              String keyPrefix = "exampledir/object";
      
              // Create an OSSClient instance. 
              OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
      
              try {
                  ListObjectsV2Result result = null;
                  do {
                      // By default, 100 objects or directories are listed each time. 
                      ListObjectsV2Request request = new ListObjectsV2Request(bucketName).withDelimiter("/").withPrefix(keyPrefix);
                      if (result != null) {
                          request.setContinuationToken(result.getNextContinuationToken());
                      }
                      result = ossClient.listObjectsV2(request);
                      List<String> folders = result.getCommonPrefixes();
                      for (String folder : folders) {
                          System.out.println(folder + " : " + (calculateFolderLength(ossClient, bucketName, folder) / 1024) + "KB");
                      }
                      List<OSSObjectSummary> sums = result.getObjectSummaries();
                      for (OSSObjectSummary s : sums) {
                          System.out.println(s.getKey() + " : " + (s.getSize() / 1024) + "KB");
                      }
                  } while (result.isTruncated());
              } catch (OSSException oe) {
                  System.out.println("Caught an OSSException, which means your request made it to OSS, "
                          + "but was rejected with an error response for some reason.");
                  System.out.println("Error Message:" + oe.getErrorMessage());
                  System.out.println("Error Code:" + oe.getErrorCode());
                  System.out.println("Request ID:" + oe.getRequestId());
                  System.out.println("Host ID:" + oe.getHostId());
              } catch (ClientException ce) {
                  System.out.println("Caught an ClientException, which means the client encountered "
                          + "a serious internal problem while trying to communicate with OSS, "
                          + "such as not being able to access the network.");
                  System.out.println("Error Message:" + ce.getMessage());
              } finally {
                  if (ossClient != null) {
                      ossClient.shutdown();
                  }
              }
          }
      
          // Query the sizes of objects within a specified directory in a bucket. 
          private static long calculateFolderLength(OSS ossClient, String bucketName, String folder) {
              long size = 0L;
              ListObjectsV2Result result = null;
              do {
                  // The default value of maxKeys is 100. The maximum value of maxKeys is 1000. 
                  ListObjectsV2Request request = new ListObjectsV2Request(bucketName).withPrefix(folder).withMaxKeys(1000);
                  if (result != null) {
                      request.setContinuationToken(result.getNextContinuationToken());
                  }
                  result = ossClient.listObjectsV2(request);
                  List<OSSObjectSummary> sums = result.getObjectSummaries();
                  for (OSSObjectSummary s : sums) {
                      size += s.getSize();
                  }
              } while (result.isTruncated());
              return size;
          }
      }

References