このトピックでは、オブジェクトを一覧表示する方法について説明します。

オブジェクトはアルファベット順に一覧表示されます。 ossClient.listObjects を使用すると、バケット内のオブジェクトを一覧表示できます。 ListObjects では、次のパラメーターを使用できます。

  • ObjectListing listObjects (String bucketName):バケット内のオブジェクトを一覧表示します。 最大 100 個のオブジェクトを一覧表示できます。
  • ObjectListing listObjects(String bucketName, String prefix):バケット内で、指定されたプレフィックスを持つオブジェクトを一覧表示します。 最大 100 個のオブジェクトを一覧表示できます。
  • ObjectListing listObjects(ListObjectsRequest listObjectsRequest):オブジェクトを柔軟にクエリするための複数のフィルタリング機能を提供します。

次の表に ObjectListing のパラメーターを示します。

パラメーター 説明 設定方法 
objectSummaries 返される Object Meta。 List<OSSObjectSummary> getObjectSummaries()
prefix 必要なオブジェクトが一覧表示されるようにするためのプレフィックス。 String getPrefix()
delimiter オブジェクトをグループ化するための区切り文字。 String getDelimiter()
marker リスト内の最初のオブジェクト。 String getMarker()
maxKeys 一覧表示可能なオブジェクトの最大数。 int getMaxKeys()
nextMarker 次のオブジェクトの初期位置。 String getNextMarker()
isTruncated リストされたオブジェクトが切り捨てられているかどうか。
  • オブジェクトが切り捨てられずにすべてリストされている場合、false 値が返されます。
  • リストされたオブジェクトが切り捨てられた場合、true 値が返されます。
boolean isTruncated()
commonPrefixes 名前がプレフィックスを共有し、スラッシュ (/) で終わるオブジェクトのセット。 List<String> getCommonPrefixes()
encodingType レスポンスに使用されるエンコードタイプ。 String getEncodingType()

簡易リスト

次のコードを実行して、指定したバケット内のオブジェクトを一覧表示します。 デフォルトでは最大 100 個のオブジェクトを一覧表示できます。

// This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
String KeyPrefix = "<yourKeyPrefix>";

// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// List objects. If you do not configure KeyPrifex, all objects in the bucket are listed. If you configure KeyPrifex, objects with a specified prefix in the bucket are listed.
ObjectListing objectListing = ossClient.listObjects(bucketName, KeyPrefix);
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
for (OSSObjectSummary s : sums) {
    System.out.println("\t" + s.getKey());
}

// Close your OSSClient.
ossClient.shutdown();
			

ListObjectsRequest によるオブジェクトの一覧表示

ListObjectsRequest のパラメーターを設定することで、オブジェクトを柔軟にクエリすることができます。 次の表に ListObjectsRequest のパラメーターを示します。

パラメーター 説明 設定方法 
prefix 返されるオブジェクトに含める必要があるプレフィックス。 setPrefix(String prefix)
delimiter 名前に基づいてオブジェクトをグループ化するためのスラッシュ (/) を指定します。 指定したプレフィックスと、最初のスラッシュ (/) の間にあるサブストリングは commonPrefixes です。 setDelimiter(String delimiter)
marker marker 値の後ろにあるオブジェクトを一覧表示します。 setMarker(String marker)
maxKeys 一覧表示可能なオブジェクトの最大数。 デフォルト値は 100 です。 最大値は 1,000 です。 setMaxKeys(Integer maxKeys)
encodingType レスポンス本文内のオブジェクト名のエンコードタイプ。 URL エンコードタイプのみがサポートされています。 setEncodingType(String encodingType)
  • 指定した数のオブジェクトの一覧表示

    次のコードを実行して、指定した数のオブジェクトを一覧表示します。

    // This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    
    // Create an OSSClient instance.
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // Configure the maximum number.
    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());
    }
    
    // Close your OSSClient.
    ossClient.shutdown();
    					
  • 指定したプレフィックスのオブジェクトの一覧表示

    次のコードを実行して、指定したプレフィックスを持つオブジェクトを一覧表示します。

    // This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    
    // Create an OSSClient instance.
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // Specify a prefix.
    final String keyPrefix = "<yourkeyPrefix>";
    
    // List objects with a specified prefix. By default, a maximum of 100 objects can be 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());
    }
    
    // Close your OSSClient.
    ossClient.shutdown();
    					
  • marker によるオブジェクトの一覧表示

    marker パラメーターは、一覧を開始するオブジェクトの名前を示します。 次のコードを実行して、一覧を開始するオブジェクト (maker で指定) を指定します。

    // This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    
    // Create an OSSClient instance.
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    final String marker = "<yourMarker>";
    
    // List objects placed after the object (specified with marker). By default, a maximum of 100 objects can be 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());
    }
    
    // Close your OSSClient.
    ossClient.shutdown();
    					
  • すべてのオブジェクトを 1 ページまたは複数ページに一覧表示

    次のコードを使用して、すべてのオブジェクトを 1 ページまたは複数ページに一覧表示します。 各ページに表示可能なオブジェクトの最大数は、maxKeys で指定されています。

    // This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    
    // Create an OSSClient instance.
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    final int maxKeys = 200;
    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());
    
    // Close your OSSClient.
    ossClient.shutdown();
    					
  • 指定したプレフィックスのオブジェクトを 1 ページまたは複数ページに一覧表示

    次のコードを実行して、指定したプレフィックスのオブジェクトを 1 ページまたは複数ページに一覧表示します。

    // This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    
    // Create an OSSClient instance.
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // A maximum of 200 objects can be listed on each page.
    final int maxKeys = 200;
    final String keyPrefix = "<yourkeyPrefix>";
    String nextMarker = "<yourNextMarker>";
    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());
    
    // Close your OSSClient.
    ossClient.shutdown();
    					
  • エンコードするオブジェクト名の指定

    名前に次の特殊文字が含まれている場合は、オブジェクト名をエンコードする必要があります。 OSS は、URL エンコードをサポートしています。

    • 一重引用符 (‘)
    • 二重引用符 (“)
    • アンパサンド (&)
    • 山かっこ (< >)
    • 一時停止マーカー (、)
    • 漢字、平仮名、片仮名

    次のコードを実行して、指定したオブジェクト名をエンコードします。

    // This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    
    // Create an OSSClient instance.
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    final int maxKeys = 200;
    final String keyPrefix = "<yourkeyPrefix>";
    String nextMarker = "<yourNextMarker>";
    ObjectListing objectListing;
    
    do {
        ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
        listObjectsRequest.setPrefix(keyPrefix);
        listObjectsRequest.setMaxKeys(maxKeys);
        listObjectsRequest.setMarker(nextMarker);
    
        // Specify the name of an object for encoding.
        listObjectsRequest.setEncodingType("url");
    
        objectListing = ossClient.listObjects(listObjectsRequest);
    
        // Decode the object.
        for (OSSObjectSummary objectSummary: objectListing.getObjectSummaries()) {
            System.out.println("Key:" + URLDecoder.decode(objectSummary.getKey(), "UTF-8"));
        }
    
        // Decode the commonPrefixes parameter.
        for (String commonPrefixes: objectListing.getCommonPrefixes()) {
            System.out.println("CommonPrefixes:" + URLDecoder.decode(commonPrefixes, "UTF-8"));
        }
    
        // Decode the nextMarker parameter.
        if (objectListing.getNextMarker() ! = null) {
            nextMarker = URLDecoder.decode(objectListing.getNextMarker(), "UTF-8");
        }
    } while (objectListing.isTruncated());
    
    // Close your OSSClient.
    ossClient.shutdown();
    					

フォルダーのシミュレーション

OSS は、フォルダーをサポートしません。 すべての要素は、オブジェクトとして保存されます。 OSS コンソールでフォルダーをシミュレートするには、名前がスラッシュ (/) で終わる 0 MB のオブジェクトを作成します。 このオブジェクトは、アップロードとダウンロードが可能です。 デフォルトでは、名前がスラッシュ (/) で終わるオブジェクトは、フォルダーとして OSS コンソールに表示されます。

delimiter パラメーターと prefix パラメーターは、フォルダー機能をシミュレートするために使用できます。

  • Prefix:フォルダーの名前としてプレフィックスを指定します。 フォルダーを使用して、このプレフィックスで始まるファイル (フォルダー内) とサブフォルダー (フォルダー内のディレクトリ) を一覧表示します。 これらのファイルとサブフォルダーは、Objects リストに含まれています。
  • Delimiter:区切り文字がスラッシュ (/) として指定されている場合、ファイルとサブフォルダー (ディレクトリー) のみが表示されます。 サブフォルダー (ディレクトリー) は、CommonPrefixes リストに含まれていますが、サブフォルダー内のファイルとフォルダーは表示されません。

フォルダーの詳細は、「フォルダーシミュレーション」をご参照ください。 オブジェクトを作成するコード全体は、GitHub をご参照ください。

オブジェクト oss.jpg、fun/test.jpg、fun/movie/001.avi、および fun/movie/007.avi がバケットに保存されているとします。 フォルダーの区切り文字として、スラッシュ (/) を使用します。 次の例は、フォルダー機能をシミュレートする方法を示しています。

  • バケット内のすべてのオブジェクトの一覧表示

    次のコードを実行して、バケット内のすべてのオブジェクトを一覧表示します。

    // This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    
    // Create an OSSClient instance.
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // Create ListObjectsRequest.
    ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
    
    // List objects.
    ObjectListing listing = ossClient.listObjects(listObjectsRequest);
    
    // Print all objects.
    System.out.println("Objects:");
    for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
        System.out.println(objectSummary.getKey());
    }
    
    // Print all commonPrefixes.
    System.out.println("CommonPrefixes:");
    for (String commonPrefix : listing.getCommonPrefixes()) {
        System.out.println(commonPrefix);
    }
    
    // Disable the OSSClient.
    // Close your OSSClient.
    					

    返される結果は、次のとおりです。

    Objects:
    fun/movie/001.avi
    fun/movie/007.avi
    fun/test.jpg
    oss.jpg
    
    CommonPrefixes:
    					
  • 指定したフォルダー内のすべてのオブジェクトの一覧表示

    次のコードを実行して、指定したフォルダー内のすべてのオブジェクトを一覧表示します。

    // This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    
    // Create an OSSClient instance.
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // Create ListObjectsRequest.
    ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
    // Configure the Prefix parameter to obtain all objects in the fun folder.
    listObjectsRequest.setPrefix("fun/");
    
    // Recursively list all objects in the fun folder.
    ObjectListing listing = ossClient.listObjects(listObjectsRequest);
    
    // Print all objects.
    System.out.println("Objects:");
    for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
        System.out.println(objectSummary.getKey());
    }
    
    // Print all commonPrefixes.
    System.out.println("\nCommonPrefixes:");
    for (String commonPrefix : listing.getCommonPrefixes()) {
        System.out.println(commonPrefix);
    }
    
    // Close your OSSClient.
    ossClient.shutdown();
    					

    返される結果は、次のとおりです。

    Objects:
    fun/movie/001.avi
    fun/movie/007.avi
    fun/test.jpg
    
    CommonPrefixes:
    					
  • フォルダー内のオブジェクトとサブフォルダーの一覧表示

    次のコードを実行して、フォルダー内のオブジェクトとサブフォルダーを一覧表示します。

    // This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    
    // Create an OSSClient instance.
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // Create ListObjectsRequest.
    ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
    
    // Set forward slashes (/) as the delimiter for folders.
    listObjectsRequest.setDelimiter("/");
    
    // List all objects and folders in the fun folder.
    listObjectsRequest.setPrefix("fun/");
    
    ObjectListing listing = ossClient.listObjects(listObjectsRequest);
    
    // Print all objects.
    System.out.println("Objects:");
    // List objects in the fun folder in a objectSummaries list.
    for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
        System.out.println(objectSummary.getKey());
    }
    
    // Print all commonPrefixes.
    System.out.println("\nCommonPrefixes:");
    // commonPrefixs lists all subfolders in the fun folder. The fun/movie/001.avi and fun/movie/007.avi objects are not listed, because they are objects in the movie folder (a subfolder of the fun folder).
    for (String commonPrefix : listing.getCommonPrefixes()) {
        System.out.println(commonPrefix);
    }
    
    // Close your OSSClient.
    ossClient.shutdown();
    					

    返される結果は、次のとおりです。

    Objects:
    fun/test.jpg
    
    CommonPrefixes:
    fun/movie/