すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:オブジェクト一覧の取得 ( OSS SDK for Java を使用)

最終更新日:Jun 28, 2025

このトピックでは、Object Storage Service (OSS) バケット内のすべてのオブジェクト、特定の数のオブジェクト、および名前に特定のプレフィックスを含むオブジェクトを一覧表示する方法について説明します。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用しています。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報を設定する方法の詳細については、「アクセス認証情報を設定する」をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「一般的なシナリオの設定例」をご参照ください。

  • オブジェクトを一覧表示するには、oss:ListObjects 権限が必要です。詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。

背景情報

GetBucket (ListObjects) または GetBucketV2 (ListObjectsV2) 操作を呼び出して、バケット内の最大 1,000 個のオブジェクトを一度に一覧表示できます。ビジネス要件に基づいてオブジェクトを一覧表示するには、リスト操作パラメーターを指定できます。たとえば、特定の位置より後のすべてのオブジェクトを一覧表示したり、特定のディレクトリ内のすべてのオブジェクトとサブディレクトリを一覧表示したり、ページごとに 1,000 個を超えるオブジェクトを一覧表示したりできます。 GetBucket (ListObjects) 操作と GetBucketV2 (ListObjectsV2) 操作には、いくつかの違いがあります。

  • GetBucket (ListObjects) 操作を呼び出してオブジェクトを一覧表示すると、オブジェクト所有者情報がレスポンスに含まれます。

  • GetBucketV2 (ListObjectsV2) 操作を呼び出してオブジェクトを一覧表示する際に、fetchOwner パラメーターを設定して、応答にオブジェクト所有者情報を含めるかどうかを指定できます。

    説明

    バージョン管理が有効になっているバケット内のオブジェクトを一覧表示するには、GetBucketV2 (ListObjectsV2) 操作を呼び出すことをお勧めします。

次の表は、GetBucket (ListObjects) または GetBucketV2 (ListObjectsV2) 操作を呼び出してオブジェクトを一覧表示するときに設定できるパラメーターについて説明しています。

  • GetBucket (ListObjects)

    GetBucket (ListObjects) 操作は、次のいずれかの形式で呼び出すことができます。

    • ObjectListing listObjects(String bucketName): バケット内のすべてのオブジェクトを一覧表示します。デフォルトでは、1 回のリクエストで最大 100 個のオブジェクトを一覧表示できます。

    • ObjectListing listObjects(String bucketName, String prefix): バケット内で、名前に特定のプレフィックスを含むオブジェクトを一覧表示します。デフォルトでは、1 回のリクエストで最大 100 個のオブジェクトを一覧表示できます。

    • ObjectListing listObjects(ListObjectsRequest listObjectsRequest): 指定された条件を満たすオブジェクトを一覧表示します。この形式を使用して、柔軟にオブジェクトを一覧表示できます。

    次の表は、GetBucket (ListObjects) 操作を呼び出すときに指定できるパラメーターについて説明しています。

    パラメーター

    説明

    メソッド

    objectSummaries

    一覧表示するオブジェクトのメタデータ。

    List<OSSObjectSummary> getObjectSummaries()

    prefix

    一覧表示するオブジェクトの名前のプレフィックス。

    String getPrefix()

    delimiter

    一覧表示するオブジェクトを名前でグループ化するために使用する文字。

    String getDelimiter()

    marker

    リスト操作の開始位置。

    String getMarker()

    maxKeys

    一度に一覧表示できるオブジェクトの最大数。

    int getMaxKeys()

    nextMarker

    次のリスト操作の開始位置。

    String getNextMarker()

    isTruncated

    オブジェクト一覧が切り捨てられるかどうかを指定します。有効な値:

    • false: すべてのオブジェクトが切り捨てられずに一覧表示されます。

    • true: オブジェクトの一部のみが一覧表示されます。

    boolean isTruncated()

    commonPrefixes

    オブジェクト名の部分文字列のセット。デリミタで終わり、同じプレフィックスを含むオブジェクトは、CommonPrefixes 内の単一の結果要素としてグループ化されます。

    List<String> getCommonPrefixes()

    encodingType

    レスポンス内のオブジェクト名のエンコーディングタイプ。

    String getEncodingType()

  • GetBucketV2 (ListObjectsV2)

    GetBucketV2 (ListObjectsV2) 操作は、次のいずれかの形式で呼び出すことができます。

    • ListObjectsV2Result listObjectsV2(String bucketName): バケット内のすべてのオブジェクトを一覧表示します。デフォルトでは、1 回のリクエストで最大 100 個のオブジェクトを一覧表示できます。

    • ListObjectsV2Result listObjectsV2(String bucketName, String prefix): バケット内で、名前に特定のプレフィックスを含むオブジェクトを一覧表示します。デフォルトでは、1 回のリクエストで最大 100 個のオブジェクトを一覧表示できます。

    • ListObjectsV2Result listObjectsV2(ListObjectsRequest listObjectsRequest): 指定された条件を満たすオブジェクトを一覧表示します。この形式を使用して、柔軟にオブジェクトを一覧表示できます。

    次の表は、GetBucketV2 (ListObjectsV2) 操作を呼び出すときに指定できるパラメーターについて説明しています。

    パラメーター

    説明

    メソッド

    objectSummaries

    一覧表示するオブジェクトのメタデータ。

    List<OSSObjectSummary> getObjectSummaries()

    prefix

    一覧表示するオブジェクトの名前のプレフィックス。

    String getPrefix()

    delimiter

    一覧表示するオブジェクトを名前でグループ化するために使用する文字。

    String getDelimiter()

    startAfter

    リスト操作の開始位置。

    String getStartAfter()

    maxKeys

    一度に一覧表示できるオブジェクトの最大数。

    int getMaxKeys()

    continuationToken

    リスト操作の開始位置。

    String getContinuationToken()

    nextContinuationToken

    次のリスト操作の開始位置。

    String getNextContinuationToken()

    isTruncated

    オブジェクト一覧が切り捨てられるかどうかを指定します。有効な値:

    • false: すべてのオブジェクトが切り捨てられずに一覧表示されます。

    • true: オブジェクトの一部のみが一覧表示されます。

    boolean isTruncated()

    commonPrefixes

    オブジェクト名の部分文字列のセット。デリミタで終わり、同じプレフィックスを含むオブジェクトは、CommonPrefixes 内の単一の結果要素としてグループ化されます。

    List<String> getCommonPrefixes()

    encodingType

    レスポンス内のオブジェクト名のエンコーディングタイプ。

    String getEncodingType()

    fetchOwner

    レスポンスにオブジェクト所有者情報を含めるかどうかを指定します。有効な値:

    • true: レスポンスにはオブジェクト所有者情報が含まれます。

    • false: レスポンスにはオブジェクト所有者情報は含まれません。

    String getFetchOwner()

シンプルなリストを使用してオブジェクトを一覧表示する

GetBucket (ListObjects) 操作または GetBucketV2 (ListObjectsV2) 操作を呼び出して、特定のバケット内のオブジェクトを一覧表示できます。

GetBucket (ListObjects) 操作を呼び出してオブジェクトを一覧表示する

次のサンプルコードは、GetBucket (ListObjects) 操作を呼び出して、特定のバケット内のオブジェクトを一覧表示する方法の例を示しています。デフォルトでは、リクエストごとに 100 個のオブジェクトが一覧表示されます。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // 一覧表示するオブジェクトの名前のプレフィックスを指定します。例: exampledir/object。
        String keyPrefix = "exampledir/object";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // オブジェクトを一覧表示します。keyPrefix を指定しない場合、バケット内のすべてのオブジェクトが一覧表示されます。keyPrefix を指定した場合、名前に指定されたプレフィックスを含むオブジェクトが一覧表示されます。
            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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}                  

GetBucketV2 (ListObjectsV2) 操作を呼び出してオブジェクトを一覧表示する

次のサンプルコードは、GetBucketV2 (ListObjectsV2) 操作を呼び出して、特定のバケット内のオブジェクトを一覧表示する方法の例を示しています。デフォルトでは、リクエストごとに 100 個のオブジェクトが一覧表示されます。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // 一覧表示するオブジェクトの名前のプレフィックスを指定します。例: exampledir/object。
        String keyPrefix = "exampledir/object";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // オブジェクトを一覧表示します。keyPrefix を指定しない場合、バケット内のすべてのオブジェクトが一覧表示されます。keyPrefix を指定した場合、名前に指定されたプレフィックスを含むオブジェクトが一覧表示されます。
            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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}

ListObjectsRequest 操作を呼び出してオブジェクトを一覧表示する

ListObjectsRequest 操作を呼び出すときにパラメーターを指定して、柔軟にオブジェクトを一覧表示できます。次の表は、ListObjectsRequest 操作を呼び出すときに指定できるパラメーターについて説明しています。

パラメーター

説明

メソッド

prefix

一覧表示するオブジェクトの名前に含まれている必要があるプレフィックス。

setPrefix(String prefix)

delimiter

一覧表示するオブジェクトを名前でグループ化するために使用する文字。たとえば、デリミタをスラッシュ (/) に設定できます。指定されたプレフィックスからスラッシュ (/) が最初に出現するまでの同じ文字列を含むオブジェクトは、CommonPrefixes 要素としてグループ化されます。CommonPrefixes 要素を含むすべてのオブジェクトが一覧表示されます。デリミタパラメーターを使用して、オブジェクトを階層的に管理およびクエリできます。これにより、より整理された直感的なクエリ結果が得られます。

setDelimiter(String delimiter)

marker

リスト操作の開始位置。マーカーの値よりアルファベット順で後の名前のオブジェクトが一覧表示されます。

setMarker(String marker)

maxKeys

一度に一覧表示できるオブジェクトの最大数。このパラメーターを指定すると、オブジェクトはアルファベット順に一覧表示されます。最大値: 1000。デフォルト値: 100。

setMaxKeys(Integer maxKeys)

encodingType

レスポンス内のオブジェクト名のエンコーディングタイプ。有効な値: URL。

setEncodingType(String encodingType)

特定の数のオブジェクトを一覧表示する

次のサンプルコードは、バケット内の特定の数のオブジェクトを一覧表示する方法の例を示しています。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // 一度に一覧表示できるオブジェクトの最大数を指定します。
            final int maxKeys = 200;
            // オブジェクトを一覧表示します。
            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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}                    

名前に特定のプレフィックスを含むオブジェクトを一覧表示する

次のサンプルコードは、バケット内で名前に特定のプレフィックスを含むオブジェクトを一覧表示する方法の例を示しています。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // 一覧表示するオブジェクトの名前のプレフィックスを指定します。例: exampledir/object。
        String keyPrefix = "exampledir/object";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // 指定されたプレフィックスを含む名前のオブジェクトを一覧表示します。デフォルトでは、100 個のオブジェクトが一覧表示されます。
            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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}                    

マーカーの値よりアルファベット順で後の名前のオブジェクトを一覧表示する

次のサンプルコードは、マーカーの値よりアルファベット順で後の名前のオブジェクトを一覧表示する方法の例を示しています。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // 一覧表示の開始位置となるオブジェクトの名前を指定します。このパラメーターを指定すると、マーカーの値よりアルファベット順で後の名前のオブジェクトが返されます。
        String marker = "ex";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // マーカーで指定されたオブジェクトよりアルファベット順で後の名前のオブジェクトを一覧表示します。デフォルトでは、100 個のオブジェクトが一覧表示されます。
            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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}

バケット内のすべてのオブジェクトをページごとに一覧表示する

次のサンプルコードは、バケット内のすべてのオブジェクトをページごとに一覧表示する方法の例を示しています。maxKeys を使用して、各ページに一覧表示できるオブジェクトの最大数を指定できます。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // maxKeys を 200 に設定します。
        int maxKeys = 200;
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}

名前に特定のプレフィックスを含むオブジェクトをページごとに一覧表示する

次のサンプルコードは、名前に特定のプレフィックスを含むオブジェクトをページごとに一覧表示する方法の例を示しています。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // maxKeys を 200 に設定します。
        int maxKeys = 200;
        // 一覧表示するオブジェクトの名前のプレフィックスを指定します。例: exampledir/object。
        String keyPrefix = "exampledir/object";
        // marker パラメーターを指定します。例: objecttest.txt。
        String nextMarker = "objecttest.txt";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}

特定のエンコーディングタイプを使用してエンコードされた名前のオブジェクトを一覧表示する

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

  • シングルクォーテーション (')

  • ダブルクォーテーション (")

  • アンパサンド (&)

  • 山かっこ (<>)

  • 句読点 (、)

  • 漢字

次のサンプルコードは、特定のエンコーディングタイプを使用してエンコードされた名前のオブジェクトを一覧表示する方法の例を示しています。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.net.URLDecoder;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // maxKeys を 200 に設定します。
        int maxKeys = 200;
        // 一覧表示するオブジェクトの名前のプレフィックスを指定します。例: exampledir/object。
        String keyPrefix = "exampledir/object";
        // marker パラメーターを指定します。例: objecttest.txt。
        String nextMarker = "objecttest.txt";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            ObjectListing objectListing;

            do {
                ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
                listObjectsRequest.setPrefix(keyPrefix);
                listObjectsRequest.setMaxKeys(maxKeys);
                listObjectsRequest.setMarker(nextMarker);

                // オブジェクト名のエンコーディングタイプを指定します。
                listObjectsRequest.setEncodingType("url");

                objectListing = ossClient.listObjects(listObjectsRequest);

                // レスポンス内のオブジェクトキーの値をデコードします。
                for (OSSObjectSummary objectSummary: objectListing.getObjectSummaries()) {
                    System.out.println("Key:" + URLDecoder.decode(objectSummary.getKey(), "UTF-8")); // キー:
                }

                // レスポンス内の CommonPrefixes の値をデコードします。
                for (String commonPrefixes: objectListing.getCommonPrefixes()) {
                    System.out.println("CommonPrefixes:" + URLDecoder.decode(commonPrefixes, "UTF-8")); // 共通のプレフィックス:
                }

                // レスポンス内の nextMarker の値をデコードします。
                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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}

ListObjectsV2Request 操作を呼び出してオブジェクトを一覧表示する

ListObjectsV2Request 操作を呼び出すときにパラメーターを指定して、柔軟にオブジェクトを一覧表示できます。たとえば、特定の数のオブジェクト、名前に特定のプレフィックスを含むオブジェクト、またはバケット内のすべてのオブジェクトをページごとに一覧表示できます。

次の表は、ListObjectsV2Request 操作を呼び出すときに指定できるパラメーターについて説明しています。

パラメーター

説明

メソッド

prefix

一覧表示するオブジェクトの名前に含まれている必要があるプレフィックス。

setPrefix(String prefix)

delimiter

一覧表示するオブジェクトを名前でグループ化するために使用する文字。たとえば、デリミタをスラッシュ (/) に設定できます。指定されたプレフィックスからスラッシュ (/) が最初に出現するまでの同じ文字列を含むオブジェクトは、CommonPrefixes 要素としてグループ化されます。CommonPrefixes 要素を含むすべてのオブジェクトが一覧表示されます。デリミタパラメーターを使用して、オブジェクトを階層的に管理およびクエリできます。これにより、より整理された直感的なクエリ結果が得られます。

setDelimiter(String delimiter)

maxKeys

一度に一覧表示できるオブジェクトの最大数。このパラメーターを指定すると、オブジェクトはアルファベット順に一覧表示されます。最大値: 1000。デフォルト値: 100。

setMaxKeys(Integer maxKeys)

startAfter

リスト操作の開始位置。startAfter の値よりアルファベット順で後の名前のオブジェクトが一覧表示されます。

setStartAfter(String startAfter)

continuationToken

このリスト操作で使用される continuationToken。

setContinuationToken(String continuationToken)

encodingType

レスポンス内のオブジェクト名のエンコーディングタイプ。有効な値: URL。

setEncodingType(String encodingType)

fetchOwner

レスポンスに所有者情報を含めるかどうかを指定します。

setFetchOwner(boolean fetchOwner)

特定の数のオブジェクトを一覧表示する

次のサンプルコードは、バケット内の特定の数のオブジェクトを一覧表示する方法の例を示しています。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // 一度に一覧表示できるオブジェクトの最大数を指定します。
        int maxKeys = 200;
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // オブジェクトを一覧表示します。デフォルトでは、1 回のリクエストで 100 個のオブジェクトが返されます。この例では、一度に最大 200 個のオブジェクトを返すことができます。
            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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}

名前に特定のプレフィックスを含むオブジェクトを一覧表示する

次のサンプルコードは、バケット内で名前に特定のプレフィックスを含むオブジェクトを一覧表示する方法の例を示しています。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // 一覧表示するオブジェクトの名前のプレフィックスを指定します。例: exampledir/object。
        String prefix = "exampledir/object";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // 指定されたプレフィックスを含む名前のオブジェクトを一覧表示します。
            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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}

startAfter の値よりアルファベット順で後の名前のオブジェクトを一覧表示する

次のサンプルコードは、startAfter の値よりアルファベット順で後の名前のオブジェクトを一覧表示する方法の例を示しています。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // 一覧表示の開始位置となるオブジェクトの名前を指定します。このパラメーターを指定すると、start-after の値よりアルファベット順で後の名前のオブジェクトが返されます。
            ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
            listObjectsV2Request.setStartAfter("ex");
            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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}

オブジェクトとその所有者情報を一覧表示する

次のサンプルコードは、オブジェクトとその所有者情報を一覧表示する方法の例を示しています。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // デフォルトでは、オブジェクト所有者情報は一覧表示されません。レスポンスにオブジェクト所有者情報を含めるには、fetchOwner パラメーターを 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()); // 所有者 ID:
                    System.out.println("name:" + s.getOwner().getDisplayName()); // 名前:
                }
            }

        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}

バケット内のすべてのオブジェクトをページごとに一覧表示する

次のサンプルコードは、バケット内のすべてのオブジェクトをページごとに一覧表示する方法の例を示しています。maxKeys を使用して、各ページに一覧表示できるオブジェクトの最大数を指定できます。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // 一度に一覧表示できるオブジェクトの最大数を指定します。
        int maxKeys = 200;
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            String nextContinuationToken = null;
            ListObjectsV2Result result = null;

            // 前のリスト操作のレスポンスに含まれる nextContinuationToken パラメーターを使用して、オブジェクトをページごとに一覧表示します。
            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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}

名前に特定のプレフィックスを含むオブジェクトをページごとに一覧表示する

次のサンプルコードは、名前に特定のプレフィックスを含むオブジェクトをページごとに一覧表示する方法の例を示しています。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // 一覧表示するオブジェクトの名前のプレフィックスを指定します。例: exampledir/object。
        String keyPrefix = "exampledir/object";
        // 一度に一覧表示できるオブジェクトの最大数を指定します。
        int maxKeys = 200;
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            String nextContinuationToken = null;
            ListObjectsV2Result result = null;

            // 指定されたプレフィックスを含む名前のオブジェクトをページごとに一覧表示します。
            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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}

特定のエンコーディングタイプを使用してエンコードされた名前のオブジェクトを一覧表示する

次のサンプルコードは、特定のエンコーディングタイプを使用してエンコードされた名前のオブジェクトを一覧表示する方法の例を示しています。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.net.URLDecoder;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // 一覧表示するオブジェクトの名前のプレフィックスを指定します。例: exampledir/object。
        String keyPrefix = "exampledir/object";
        // 一度に一覧表示できるオブジェクトの最大数を指定します。
        int maxKeys = 200;
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";


        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            String nextContinuationToken = null;
            ListObjectsV2Result result = null;

            // 返される結果が URL エンコードされるように指定します。この場合、レスポンス内の prefix、delimiter、startAfter、key、および commonPrefixes パラメーターの値をデコードする必要があります。
            do {
                ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName).withMaxKeys(maxKeys);
                listObjectsV2Request.setPrefix(keyPrefix);
                listObjectsV2Request.setEncodingType("url");
                listObjectsV2Request.setContinuationToken(nextContinuationToken);
                result = ossClient.listObjectsV2(listObjectsV2Request);

                // レスポンス内の prefix の値をデコードします。
                if (result.getPrefix() != null) {
                    String prefix = URLDecoder.decode(result.getPrefix(), "UTF-8");
                    System.out.println("prefix: " + prefix); // プレフィックス:
                }

                // レスポンス内の delimiter の値をデコードします。
                if (result.getDelimiter() != null) {
                    String delimiter = URLDecoder.decode(result.getDelimiter(), "UTF-8");
                    System.out.println("delimiter: " + delimiter); // デリミタ:
                }

                // レスポンス内の startAfter の値をデコードします。
                if (result.getStartAfter() != null) {
                    String startAfter = URLDecoder.decode(result.getStartAfter(), "UTF-8");
                    System.out.println("startAfter: " + startAfter); // startAfter:
                }

                // レスポンス内のオブジェクトキーの値をデコードします。
                for (OSSObjectSummary s : result.getObjectSummaries()) {
                    String decodedKey = URLDecoder.decode(s.getKey(), "UTF-8");
                    System.out.println("key: " + decodedKey); // キー:
                }

                // レスポンス内の CommonPrefixes の値をデコードします。
                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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
            System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                    + "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();
            }
        }
    }
}

ディレクトリ別にオブジェクトを一覧表示する

OSS はフラットな構造を使用してオブジェクトを格納します。ディレクトリとは、名前がスラッシュ (/) で終わるゼロバイトのオブジェクトです。このオブジェクトはアップロードおよびダウンロードできます。デフォルトでは、名前がスラッシュ (/) で終わるオブジェクトは、OSS コンソールにディレクトリとして表示されます。ディレクトリを作成するために使用される完全なサンプルコードについては、GitHub にアクセスしてください。

デリミタとプレフィックスパラメーターを指定して、ディレクトリ別にオブジェクトを一覧表示できます。

  • リクエストでプレフィックスをディレクトリ名に設定すると、名前にプレフィックスが含まれるオブジェクトとサブディレクトリが一覧表示されます。

  • リクエストでプレフィックスを指定し、デリミタをスラッシュ (/) に設定すると、ディレクトリ内で名前が指定されたプレフィックスで始まるオブジェクトとサブディレクトリが一覧表示されます。各サブディレクトリは、CommonPrefixes 内の単一の結果要素として一覧表示されます。これらのサブディレクトリ内のオブジェクトとディレクトリは一覧表示されません。

たとえば、バケットに oss.jpgfun/test.jpgfun/movie/001.avifun/movie/007.avi というオブジェクトが含まれているとします。スラッシュ (/) はディレクトリデリミタとして指定されています。次の例では、シミュレートされたディレクトリ内のオブジェクトを一覧表示する方法について説明します。

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

  • 次のサンプルコードは、GetBucket (ListObjects) 操作を呼び出してバケット内のすべてのオブジェクトを一覧表示する方法の例を示しています。

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.*;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // バケットの名前を指定します。例: examplebucket。
            String bucketName = "examplebucket";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
    
            // OSSClient インスタンスを作成します。
            // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                // オブジェクトを一覧表示するリクエストを作成します。
                ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
    
                // オブジェクトを一覧表示します。
                ObjectListing listing = ossClient.listObjects(listObjectsRequest);
    
                // すべてのオブジェクトを走査します。
                System.out.println("Objects:"); // オブジェクト:
                for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
                    System.out.println(objectSummary.getKey());
                }
    
                // すべての CommonPrefix 要素を走査します。
                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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
                System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                        + "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();
                }
            }
        }
    }
  • 次のサンプルコードは、GetBucketV2 (ListObjectsV2) 操作を呼び出してバケット内のすべてのオブジェクトを一覧表示する方法の例を示しています。

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.*;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // バケットの名前を指定します。例: examplebucket。
            String bucketName = "examplebucket";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
    
            // OSSClient インスタンスを作成します。
            // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                // オブジェクトを一覧表示します。
                ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
                ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
    
                // すべてのオブジェクトを走査します。
                System.out.println("Objects:"); // オブジェクト:
                for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
                    System.out.println(objectSummary.getKey());
                }
    
                // すべての CommonPrefix 要素を走査します。
                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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
                System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                        + "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();
                }
            }
        }
    }
  • レスポンスパラメーター

    バケット内のすべてのオブジェクトを一覧表示する上記の 2 つのメソッドに対して、次のレスポンスが返されます。

    Objects: // オブジェクト:
    fun/movie/001.avi
    fun/movie/007.avi
    fun/test.jpg
    oss.jpg
    CommonPrefixes: // 共通のプレフィックス:                    

ディレクトリ内のすべてのオブジェクトを一覧表示する

  • 次のサンプルコードは、GetBucket (ListObjects) 操作を呼び出してディレクトリ内のすべてのオブジェクトを一覧表示する方法の例を示しています。

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.*;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // バケットの名前を指定します。例: examplebucket。
            String bucketName = "examplebucket";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
    
            // OSSClient インスタンスを作成します。
            // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                // オブジェクトを一覧表示するリクエストを作成します。
                ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
                // プレフィックスを fun/ に設定して、fun/ ディレクトリ内のすべてのオブジェクトを一覧表示します。
                listObjectsRequest.setPrefix("fun/");
    
                // fun/ ディレクトリ内のすべてのオブジェクトを一覧表示します。
                ObjectListing listing = ossClient.listObjects(listObjectsRequest);
    
                // すべてのオブジェクトを走査します。
                System.out.println("Objects:"); // オブジェクト:
                for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
                    System.out.println(objectSummary.getKey());
                }
    
                // すべての CommonPrefix 要素を走査します。
                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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
                System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                        + "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();
                }
            }
        }
    }
  • 次のサンプルコードは、GetBucketV2 (ListObjectsV2) 操作を呼び出して特定のディレクトリ内のすべてのオブジェクトを一覧表示する方法の例を示しています。

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.*;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // バケットの名前を指定します。例: examplebucket。
            String bucketName = "examplebucket";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
    
            // OSSClient インスタンスを作成します。
            // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                // オブジェクトを一覧表示する ListObjectsV2Request リクエストを作成します。
                ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
    
                // プレフィックスを fun/ に設定して、fun/ ディレクトリ内のすべてのオブジェクトを一覧表示します。
                listObjectsV2Request.setPrefix("fun/");
    
                // リクエストを開始します。
                ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
    
                // すべてのオブジェクトを走査します。
                System.out.println("Objects:"); // オブジェクト:
                for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
                    System.out.println(objectSummary.getKey());
                }
    
                // すべての CommonPrefix 要素を走査します。
                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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
                System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                        + "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();
                }
            }
        }
    }
  • 指定されたディレクトリ内のすべてのオブジェクトを一覧表示する上記の 2 つの操作に対して、次のレスポンスが返されます。

    Objects: // オブジェクト:
    fun/movie/001.avi
    fun/movie/007.avi
    fun/test.jpg
    CommonPrefixes: // 共通のプレフィックス:                    

特定のディレクトリ内のオブジェクトとサブディレクトリを一覧表示する

  • 次のサンプルコードは、GetBucket (ListObjects) 操作を呼び出して特定のディレクトリ内のオブジェクトとサブディレクトリを一覧表示する方法の例を示しています。

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.*;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // バケットの名前を指定します。例: examplebucket。
            String bucketName = "examplebucket";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
    
            // OSSClient インスタンスを作成します。
            // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                // オブジェクトを一覧表示するリクエストを作成します。
                ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
    
                // デリミタをスラッシュ (/) に設定します。
                listObjectsRequest.setDelimiter("/");
    
                // fun/ ディレクトリ内のすべてのオブジェクトとサブディレクトリを一覧表示します。
                listObjectsRequest.setPrefix("fun/");
    
                ObjectListing listing = ossClient.listObjects(listObjectsRequest);
    
                // すべてのオブジェクトを走査します。
                System.out.println("Objects:"); // オブジェクト:
                // レスポンスでは、objectSummaries に fun/ ディレクトリ内のオブジェクトが一覧表示されます。
                for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
                    System.out.println(objectSummary.getKey());
                }
    
                // すべての CommonPrefix 要素を走査します。
                System.out.println("\nCommonPrefixes:"); // 共通のプレフィックス:
                // CommonPrefixs には、fun/ ディレクトリ内のすべてのサブディレクトリが一覧表示されます。fun/movie/001.avi オブジェクトと fun/movie/007.avi オブジェクトは、fun/ ディレクトリの movie/ サブディレクトリにあるため、一覧表示されません。
                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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
                System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                        + "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();
                }
            }
        }
    }
  • 次のサンプルコードは、GetBucketV2 (ListObjectsV2) 操作を呼び出してディレクトリ内のオブジェクトとサブディレクトリを一覧表示する方法の例を示しています。

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.*;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // バケットの名前を指定します。例: examplebucket。
            String bucketName = "examplebucket";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
    
            // OSSClient インスタンスを作成します。
            // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                // オブジェクトを一覧表示する ListObjectsV2Request リクエストを作成します。
                ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
    
                // プレフィックスを fun/ に設定して、fun/ ディレクトリ内のすべてのオブジェクトとサブディレクトリを一覧表示します。
                listObjectsV2Request.setPrefix("fun/");
    
                // デリミタをスラッシュ (/) に設定します。
                listObjectsV2Request.setDelimiter("/");
    
                // リクエストを開始します。
                ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
    
                // すべてのオブジェクトを走査します。
                System.out.println("Objects:"); // オブジェクト:
                // レスポンスでは、objectSummaries に fun/ ディレクトリ内のオブジェクトが一覧表示されます。
                for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
                    System.out.println(objectSummary.getKey());
                }
    
                // すべての CommonPrefix 要素を走査します。
                System.out.println("\nCommonPrefixes:"); // 共通のプレフィックス:
                // CommonPrefixs には、fun/ ディレクトリ内のすべてのサブディレクトリが一覧表示されます。fun/movie/001.avi オブジェクトと fun/movie/007.avi オブジェクトは、fun/ ディレクトリの movie/ サブディレクトリにあるため、一覧表示されません。
                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, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
                System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                        + "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();
                }
            }
        }
    }
  • 指定されたディレクトリ内のオブジェクトとサブディレクトリを一覧表示する上記の 2 つの操作を呼び出すと、次のレスポンスが返されます。

    Objects: // オブジェクト:
    fun/test.jpg
    
    CommonPrefixes: // 共通のプレフィックス:
    fun/movie/                    

特定のディレクトリ内のオブジェクトのサイズを一覧表示する

  • 次のサンプルコードは、GetBucket (ListObjects) 操作を呼び出して特定のディレクトリ内のオブジェクトのサイズを一覧表示する方法の例を示しています。

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.CredentialsProviderFactory;
    import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.OSSObjectSummary;
    import com.aliyun.oss.model.ObjectListing;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // バケットの名前を指定します。例: examplebucket.
            String bucketName = "examplebucket";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
            // 一覧表示するオブジェクトの名前のプレフィックスを指定します。例: exampledir/。ルートディレクトリ内のオブジェクトとディレクトリのサイズを走査する場合は、このパラメーターを空のままにします。
            String prefix = "exampledir/";
    
            // OSSClient インスタンスを作成します。
            // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
            OSS ossClient = OSSClientBuilder.create()
                    .endpoint(endpoint)
                    .credentialsProvider(credentialsProvider)
                    .clientConfiguration(clientBuilderConfiguration)
                    .region(region)
                    .build();
    
            try {
                long totalSize = 0;
                int totalCount = 0;
                String nextMarker = null;
                final int maxKeys = 1000;
    
                do {
                    ObjectListing objectListing = ossClient.listObjects(bucketName, prefix);
                    for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
                        totalSize += objectSummary.getSize();
                        totalCount++;
                        // 各オブジェクトの名前とサイズを出力します。
                        System.out.println("File: " + objectSummary.getKey() + " | Size: " + objectSummary.getSize() + " bytes (" + formatSize(objectSummary.getSize()) + ")"); // ファイル: | サイズ: バイト ()
                    }
                    nextMarker = objectListing.getNextMarker();
                } while (nextMarker != null && !nextMarker.isEmpty());
    
                System.out.println("Folder: " + prefix); // フォルダー:
                System.out.println("Total objects: " + totalCount); // 合計オブジェクト数:
                System.out.println("Total size (bytes): " + totalSize); // 合計サイズ (バイト):
                System.out.println("Total size (human readable): " + formatSize(totalSize)); // 合計サイズ (人間が読める形式):
    
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
                System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                        + "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();
                }
            }
        }
    
        // バイトを読みやすい形式に変換します。
        public static String formatSize(long size) {
            String[] units = {"B", "KB", "MB", "GB", "TB", "PB"};
            int unitIndex = 0;
            double sizeD = size;
            while (sizeD >= 1024 && unitIndex < units.length - 1) {
                sizeD /= 1024;
                unitIndex++;
            }
            return String.format("%.2f %s", sizeD, units[unitIndex]);
        }
    }
    
  • 次のサンプルコードは、GetBucketV2 (ListObjectsV2) 操作を呼び出してディレクトリ内のオブジェクトのサイズを一覧表示する方法の例を示しています。

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.CredentialsProviderFactory;
    import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.ListObjectsV2Request;
    import com.aliyun.oss.model.ListObjectsV2Result;
    import com.aliyun.oss.model.OSSObjectSummary;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // バケットの名前を指定します。例: examplebucket.
            String bucketName = "examplebucket";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
            // 一覧表示するオブジェクトの名前のプレフィックスを指定します。例: exampledir/。ルートディレクトリ内のオブジェクトとディレクトリのサイズを走査する場合は、このパラメーターを空のままにします。
            String prefix = "exampledir/";
    
    
            // OSSClient インスタンスを作成します。
            // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
            OSS ossClient = OSSClientBuilder.create()
                    .endpoint(endpoint)
                    .credentialsProvider(credentialsProvider)
                    .clientConfiguration(clientBuilderConfiguration)
                    .region(region)
                    .build();
    
            try {
                long totalSize = 0;
                int totalCount = 0;
                String continuationToken = null;
                final int maxKeys = 1000;
    
                do {
                    ListObjectsV2Request request = new ListObjectsV2Request(bucketName)
                            .withPrefix(prefix)
                            .withMaxKeys(maxKeys)
                            .withContinuationToken(continuationToken);
    
                    ListObjectsV2Result result = ossClient.listObjectsV2(request);
    
                    for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
                        totalSize += objectSummary.getSize();
                        totalCount++;
                        System.out.println("File: " + objectSummary.getKey() + " | Size: " + objectSummary.getSize() + " bytes (" + formatSize(objectSummary.getSize()) + ")"); // ファイル: | サイズ: バイト ()
                    }
    
                    continuationToken = result.getNextContinuationToken();
                } while (continuationToken != null);
    
                System.out.println("\nFolder: " + prefix); // フォルダー:
                System.out.println("Total objects: " + totalCount); // 合計オブジェクト数:
                System.out.println("Total size (bytes): " + totalSize); // 合計サイズ (バイト):
                System.out.println("Total size (human readable): " + formatSize(totalSize)); // 合計サイズ (人間が読める形式):
    
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, " // OSS例外をキャッチしました。これは、リクエストが 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()); // リクエスト ID:
                System.out.println("Host ID:" + oe.getHostId()); // ホスト ID:
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered " // Client例外をキャッチしました。これは、クライアントが OSS と通信しようとしているときに深刻な内部問題が発生したことを意味します。たとえば、ネットワークにアクセスできないなどです。
                        + "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();
                }
            }
        }
    
        // バイトを読みやすい形式に変換します。
        public static String formatSize(long size) {
            String[] units = {"B", "KB", "MB", "GB", "TB", "PB"};
            int unitIndex = 0;
            double sizeD = size;
            while (sizeD >= 1024 && unitIndex < units.length - 1) {
                sizeD /= 1024;
                unitIndex++;
            }
            return String.format("%.2f %s", sizeD, units[unitIndex]);
        }
    }
    

関連情報

  • オブジェクトを一覧表示するために使用される完全なサンプルコードについては、GitHub にアクセスしてください。

  • オブジェクトを一覧表示するために呼び出すことができる API 操作の詳細については、「GetBucket (ListObjects)」および「ListObjectsV2 (GetBucketV2)」をご参照ください。

  • LiveChannel を一覧表示および管理する方法の詳細については、「LiveChannel の管理」をご参照ください。