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

Object Storage Service:Javaでオブジェクトをリストする方法

最終更新日:Feb 23, 2024

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

使用上の注意

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

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

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「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

    リスト操作の開始位置。

    文字列getStartAfter()

    maxKeys

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

    int getMaxKeys()

    continuationToken

    リスト操作の開始位置。

    文字列getContinuationToken()

    nextContinuationToken

    次のリスト操作が開始される位置。

    文字列getNextContinuationToken()

    isTruncated

    オブジェクトリストを切り捨てるかどうかを指定します。 有効な値:

    • false: すべてのオブジェクトは切り捨てなしでリストされます。

    • true: オブジェクトの一部のみがリストされます。

    boolean isTruncated()

    commonPrefixes

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

    List<String> getCommonPrefixes()

    encodingType

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

    String getEncodingType()

    fetchOwner

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

    • true: 応答にはオブジェクト所有者情報が含まれます。

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

    文字列getFetchOwner()

単純なリストを使用してオブジェクトをリストする

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

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

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    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";

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

        try {
            // List objects. keyPrefixを指定しない場合、バケット内のすべてのオブジェクトが一覧表示されます。 keyPrefixを指定すると、指定されたプレフィックスを名前に含むオブジェクトが一覧表示されます。 
            ObjectListing objectListing = ossClient.listObjects(bucketName, keyPrefix);
            List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
            for (OSSObjectSummary s : sums) {
                System.out.println("\t" + s.getKey());
            }
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}                  

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

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    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";

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

        try {
            // List objects. keyPrefixを指定しない場合、バケット内のすべてのオブジェクトが一覧表示されます。 keyPrefixを指定すると、指定されたプレフィックスを名前に含むオブジェクトが一覧表示されます。 
            ListObjectsV2Result result = ossClient.listObjectsV2(bucketName, keyPrefix);
            リスト <OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();

            for (OSSObjectSummary s : ossObjectSummaries) {
                System.out.println("\t" + s.getKey());
            }
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

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

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

パラメーター

説明

メソッド

prefix

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

setPrefix(String prefix)

delimiter

リストするオブジェクトを名前でグループ化するために使用される文字。 指定されたプレフィックスから区切り文字の最初の出現までの同じ文字列を名前に含むオブジェクトは、CommonPrefixes要素としてグループ化されます。

setDelimiter(String delimiter)

marker

リスト操作の開始位置。 markerの値の後にアルファベット順に名前が付いているオブジェクトが一覧表示されます。

setMarker(String marker)

maxKeys

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

setMaxKeys(Integer maxKeys)

encodingType

レスポンス内のオブジェクト名のエンコードタイプ。 URLエンコードのみがサポートされています。

setEncodingType(String encodingType)

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

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    public static void main(String[] args){
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス資格情報を取得します。 コードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket. 
        String bucketName = "examplebucket";

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

        try {
            // この操作で一覧表示できるオブジェクトの最大数を指定します。 
            final int maxKeys = 200;
            // List objects. 
            ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withMaxKeys(maxKeys));
            List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
            for (OSSObjectSummary s : sums) {
                System.out.println("\t" + s.getKey());
            }
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}                    

名前に特定のプレフィックスが含まれるオブジェクトのリスト

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    public static void main(String[] args){
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        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";

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

        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 (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}                    

markerの値の後に名前がアルファベット順に表示されるオブジェクトを一覧表示します。

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    public static void main(String[] args){
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス資格情報を取得します。 コードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket. 
        String bucketName = "examplebucket";
        // リストが始まるオブジェクトの名前。 このパラメーターを指定すると、markerの値の後に名前がアルファベット順に表示されるオブジェクトが返されます。   
        文字列マーカー="ex";

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

        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 (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

ページですべてのオブジェクトを一覧表示

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    public static void main(String[] args){
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        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;

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

        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 (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

名前に特定のプレフィックスが含まれるオブジェクトをページごとにリストする

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    public static void main(String[] args){
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        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。 
        文字列nextMarker = "objecttest.txt";

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

        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 (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

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

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

  • 一重引用符 (')

  • 二重引用符 (")

  • アンパサンド (&)

  • アングルブラケット (<>)

  • 一時停止マーカー (、)

  • 漢字、平仮名、片仮名

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
impor t java.net.URLDecoder;

public classデモ {
    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。 
        文字列nextMarker = "objecttest.txt";

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

        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);

                // レスポンスのKeyの値をデコードします。 
                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 (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

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

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

次の表に、ListObjectsV2Request操作を呼び出すときに指定できるパラメーターを示します。

パラメーター

説明

メソッド

prefix

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

setPrefix(String prefix)

delimiter

リストするオブジェクトを名前でグループ化するために使用される文字。 指定されたプレフィックスから区切り文字の最初の出現までの同じ文字列を名前に含むオブジェクトは、CommonPrefixes要素としてグループ化されます。

setDelimiter(String delimiter)

maxKeys

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

setMaxKeys(Integer maxKeys)

startAfter

リスト操作の開始位置。 名前がstartAfterの値の後にアルファベット順にあるオブジェクトがリストされます。

setStartAfter (文字列startAfter)

continuationToken

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

setContinuationToken (文字列continuationToken)

encodingType

レスポンス内のオブジェクト名のエンコードタイプ。 URLエンコードのみがサポートされています。

setEncodingType(String encodingType)

fetchOwner

応答に所有者情報を含めるかどうかを指定します。

setFetchOwner(boolean fetchOwner)

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

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    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;

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

        try {
            // List objects. デフォルトでは、100のオブジェクトは単一のリクエストによって返されます。 この例では、一度に最大200個のオブジェクトを返すことができます。 
            ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
            listObjectsV2Request.setMaxKeys(maxKeys);
            ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
            リスト <OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();

            for (OSSObjectSummary s : ossObjectSummaries) {
                System.out.println("\t" + s.getKey());
            }
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

名前に特定のプレフィックスが含まれるオブジェクトのリスト

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    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";

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

        try {
            // List objects. 
            ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
            listObjectsV2Request.setPrefix (プレフィックス);
            ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
            リスト <OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();

            for (OSSObjectSummary s : ossObjectSummaries) {
                System.out.println("\t" + s.getKey());
            }
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

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

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    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";

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

        try {
            // リストが始まるオブジェクトの名前。 オブジェクトは名前のアルファベット順に返されます。           
            ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
            listObjectsV2Request.setStartAfter("ex");
            ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
            リスト <OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();

            for (OSSObjectSummary s : ossObjectSummaries) {
                System.out.println("\t" + s.getKey());
            }
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

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

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    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";

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

        try {
            // デフォルトでは、オブジェクト所有者に関する情報はリストされません。 レスポンスにオブジェクト所有者情報を含めるには、fetchOwnerパラメーターをtrueに設定します。 
            ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
            listObjectsV2Request.setFetchOwner(true);
            ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
            リスト <OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();

            for (OSSObjectSummary s : ossObjectSummaries) {
                System.out.println("\t" + s.getKey());
                if (s.getOwner() != null) {
                    System.out.println("owner id:" + s.getOwner().getId());
                    System.out.println("name:" + s.getOwner().getDisplayName());
                }
            }
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

ページですべてのオブジェクトを一覧表示

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    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;

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

        try {
            文字列nextContinuationToken = null;
            ListObjectsV2Result result = null;

            // 前のリスト操作の応答に含まれるnextContinuationTokenパラメーターを使用して、ページごとにオブジェクトをリストします。 
            do {
                ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName).withMaxKeys(maxKeys);
                listObjectsV2Request.setContinuationToken(nextContinuationToken);
                result = ossClient.listObjectsV2(listObjectsV2Request);

                リスト <OSSObjectSummary> sums = result.getObjectSummaries();
                for (OSSObjectSummary s : sums) {
                    System.out.println("\t" + s.getKey());
                }

                nextContinuationToken = result.getNextContinuationToken();

            } while (result.isTruncated());
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

名前に特定のプレフィックスが含まれるオブジェクトをページごとにリストする

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.Listをインポートします。public classデモ {
    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;

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

        try {
            文字列nextContinuationToken = null;
            ListObjectsV2Result result = null;

            // 名前に特定のプレフィックスが含まれるオブジェクトをページ単位でリストします。 
            do {
                ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName).withMaxKeys(maxKeys);
                listObjectsV2Request.setPrefix(keyPrefix);
                listObjectsV2Request.setContinuationToken(nextContinuationToken);
                result = ossClient.listObjectsV2(listObjectsV2Request);

                リスト <OSSObjectSummary> sums = result.getObjectSummaries();
                for (OSSObjectSummary s : sums) {
                    System.out.println("\t" + s.getKey());
                }

                nextContinuationToken = result.getNextContinuationToken();

            } while (result.isTruncated());
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

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

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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
impor t java.net.URLDecoder;

public classデモ {
    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;

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

        try {
            文字列nextContinuationToken = null;
            ListObjectsV2Result result = null;

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

                // 応答のプレフィックスの値をデコードします。 
                if (result.getPrefix() != null) {
                    文字列プレフィックス=URLDecoder.de code(result.getPrefix() 、"UTF-8");
                    System.out.println("prefix: " + prefix);
                }

                // レスポンスの区切り文字の値をデコードします。 
                if (result.getDelimiter() != null) {
                    文字列区切り文字=URLDecoder.deコード (result.getDelimiter() 、"UTF-8");
                    System.out.println("delimiter: " + delimiter);
                }

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

                // レスポンスのkeyの値をデコードします。 
                for (OSSObjectSummary s : result.getObjectSummaries()) {
                    文字列decodedKey = URLDecoder.deコード (s.getKey() 、"UTF-8");
                    System.out.println("key: " + decodedKey);
                }

                // レスポンス内のCommonPrefixesの値をデコードします。 
                for (文字列commonPrefix: result.getCommonPrefixes()) {
                    文字列decodeCommonPrefix = URLDecoder.deコード (commonPrefix、"UTF-8");
                    System.out.println("CommonPrefix:" + decodeCommonPrefix);
                }

                nextContinuationToken = result.getNextContinuationToken();

            } while (result.isTruncated());
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

ディレクトリによるオブジェクトの一覧表示

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

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

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

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

バケットにoss.jpgfun/test.jpgfun/movie/001.avifun/movie/007.aviのオブジェクトが含まれているとします。 ディレクトリ区切り文字としてスラッシュ (/) を指定します。 次の例では、シミュレートされたディレクトリにオブジェクトを一覧表示します。

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

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

    com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
    impor t com.aliyun.oss.com mon.auth.*;
    com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
    
    public classデモ {
        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";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                // オブジェクトを一覧表示するリクエストを作成します。 
                ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
    
                // List objects. 
                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 (Exception e) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "しかし、何らかの理由でエラー応答で拒否されました。");
                System.out.println("エラーメッセージ:" + oe.getErrorMessage());
                System.out.println("エラーコード:" + oe.getErrorCode());
                System.out.println("リクエストID:" + oe.getRequestId());
                System.out.println("ホストID:" + oe.getHostId());
            } catch (ClientException e) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + 「ネットワークにアクセスできないなど」;
                System.out.println("エラーメッセージ:" + ce.getMessage());
            } 最後に{
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • 次のサンプルコードは、GetBucketV2 (ListObjectsV2) 操作を呼び出してバケット内のすべてのオブジェクトを一覧表示する方法の例を示しています。

    com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
    impor t com.aliyun.oss.com mon.auth.*;
    com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
    
    public classデモ {
        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";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                // List objects. 
                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 (文字列commonPrefix : result.getCommonPrefixes()) {
                    System.out.println(commonPrefix);
                }
            } catch (Exception e) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "しかし、何らかの理由でエラー応答で拒否されました。");
                System.out.println("エラーメッセージ:" + oe.getErrorMessage());
                System.out.println("エラーコード:" + oe.getErrorCode());
                System.out.println("リクエストID:" + oe.getRequestId());
                System.out.println("ホストID:" + oe.getHostId());
            } catch (ClientException e) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + 「ネットワークにアクセスできないなど」;
                System.out.println("エラーメッセージ:" + ce.getMessage());
            } 最後に{
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • レスポンスの例

    バケット内のすべてのオブジェクトを一覧表示する前述の2つのメソッドに対して、次の応答が返されます。

    オブジェクト:
    楽しい /ムービー /001.avi
    楽しい /ムービー /007.avi
    楽しい /test.jpg
    oss.jpg
    CommonPrefixes: 

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

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

    com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
    impor t com.aliyun.oss.com mon.auth.*;
    com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
    
    public classデモ {
        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";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            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 (Exception e) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "しかし、何らかの理由でエラー応答で拒否されました。");
                System.out.println("エラーメッセージ:" + oe.getErrorMessage());
                System.out.println("エラーコード:" + oe.getErrorCode());
                System.out.println("リクエストID:" + oe.getRequestId());
                System.out.println("ホストID:" + oe.getHostId());
            } catch (ClientException e) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + 「ネットワークにアクセスできないなど」;
                System.out.println("エラーメッセージ:" + ce.getMessage());
            } 最後に{
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • 次のサンプルコードでは、GetBucketV2 (ListObjectsV2) 操作を呼び出してディレクトリ内のすべてのオブジェクトを一覧表示する方法の例を示します。

    com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
    impor t com.aliyun.oss.com mon.auth.*;
    com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
    
    public classデモ {
        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";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            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 (文字列commonPrefix : result.getCommonPrefixes()) {
                    System.out.println(commonPrefix);
                }
            } catch (Exception e) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "しかし、何らかの理由でエラー応答で拒否されました。");
                System.out.println("エラーメッセージ:" + oe.getErrorMessage());
                System.out.println("エラーコード:" + oe.getErrorCode());
                System.out.println("リクエストID:" + oe.getRequestId());
                System.out.println("ホストID:" + oe.getHostId());
            } catch (ClientException e) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + 「ネットワークにアクセスできないなど」;
                System.out.println("エラーメッセージ:" + ce.getMessage());
            } 最後に{
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • 指定したディレクトリ内のすべてのオブジェクトを一覧表示する上記の2つの操作に対して、次の応答が返されます。

    オブジェクト:
    楽しい /ムービー /001.avi
    楽しい /ムービー /007.avi
    楽しい /test.jpg
    CommonPrefixes: 

指定したディレクトリ内のオブジェクトおよびサブディレクトリの一覧表示

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

    com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
    impor t com.aliyun.oss.com mon.auth.*;
    com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
    
    public classデモ {
        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";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            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 (Exception e) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "しかし、何らかの理由でエラー応答で拒否されました。");
                System.out.println("エラーメッセージ:" + oe.getErrorMessage());
                System.out.println("エラーコード:" + oe.getErrorCode());
                System.out.println("リクエストID:" + oe.getRequestId());
                System.out.println("ホストID:" + oe.getHostId());
            } catch (ClientException e) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + 「ネットワークにアクセスできないなど」;
                System.out.println("エラーメッセージ:" + ce.getMessage());
            } 最後に{
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • 次のサンプルコードでは、GetBucketV2 (ListObjectsV2) 操作を呼び出して、ディレクトリ内のオブジェクトとサブディレクトリを一覧表示する方法の例を示します。

    com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
    impor t com.aliyun.oss.com mon.auth.*;
    com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
    
    public classデモ {
        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";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                // ListObjectsV2Requestリクエストを作成してオブジェクトを一覧表示します。 
                ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
    
                // Prefixを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 (文字列commonPrefix : result.getCommonPrefixes()) {
                    System.out.println(commonPrefix);
                }
            } catch (Exception e) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "しかし、何らかの理由でエラー応答で拒否されました。");
                System.out.println("エラーメッセージ:" + oe.getErrorMessage());
                System.out.println("エラーコード:" + oe.getErrorCode());
                System.out.println("リクエストID:" + oe.getRequestId());
                System.out.println("ホストID:" + oe.getHostId());
            } catch (ClientException e) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + 「ネットワークにアクセスできないなど」;
                System.out.println("エラーメッセージ:" + ce.getMessage());
            } 最後に{
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • 上記の2つの操作を呼び出して、指定したディレクトリ内のオブジェクトとサブディレクトリを一覧表示すると、次の応答が返されます。

    オブジェクト:
    楽しい /test.jpg
    
    CommonPrefixes:
    楽しい /映画 /

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

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

    com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;import com.aliyun.oss.OSS;
    impor t com.aliyun.oss.com mon.auth.*;
    impor t com.aliyun.oss.com mon.auth.*;
    com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
    java.util.Listをインポートします。public classデモ {
        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";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                ObjectListing objectListing = null;
                do {
                    // デフォルトでは、一度に100のオブジェクトまたはディレクトリがリストされます。 
                    ListObjectsRequest request = new ListObjectsRequest(bucketName).withDelimiter("/").withPrefix(keyPrefix);
                    if (objectListing != null) {
                        request.setMarker(objectListing.getNextMarker());
                    }
                    objectListing = ossClient.listObjects(request);
                    List<String> folders = objectListing.getCommonPrefixes();
                    for (文字列フォルダ: フォルダ) {
                        System.out.println(folder + " : " + (calculateFolderLength(ossClient, bucketName, folder) / 1024) + "KB");
                    }
                    List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
                    for (OSSObjectSummary s : sums) {
                        System.out.println(s.getKey() + " : " + (s.getSize() / 1024) + "KB");
                    }
                } while (objectListing.isTruncated());
            } catch (Exception e) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "しかし、何らかの理由でエラー応答で拒否されました。");
                System.out.println("エラーメッセージ:" + oe.getErrorMessage());
                System.out.println("エラーコード:" + oe.getErrorCode());
                System.out.println("リクエストID:" + oe.getRequestId());
                System.out.println("ホストID:" + oe.getHostId());
            } catch (ClientException e) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + 「ネットワークにアクセスできないなど」;
                System.out.println("エラーメッセージ:" + ce.getMessage());
            } 最後に{
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    
        // バケット内の特定のディレクトリにあるオブジェクトのサイズを一覧表示します。 
        private static long calculateFolderLength(OSS ossClient、String bucketName、Stringフォルダ) {
            ロングサイズ=0L;
            ObjectListing objectListing = null;
            do {
                // MaxKeysのデフォルト値は100です。 MaxKeysの最大値は1000です。 
                ListObjectsRequest request = new ListObjectsRequest(bucketName).withPrefix (フォルダー).withMaxKeys(1000);
                if (objectListing != null) {
                    request.setMarker(objectListing.getNextMarker());
                }
                objectListing = ossClient.listObjects(request);
                List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
                for (OSSObjectSummary s : sums) {
                    size += s.getSize();
                }
            } while (objectListing.isTruncated());
            return size;
        }
    }
  • 次のサンプルコードでは、GetBucketV2 (ListObjectsV2) 操作を呼び出して、ディレクトリ内のオブジェクトのサイズを一覧表示する方法の例を示します。

    com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;import com.aliyun.oss.OSS;
    impor t com.aliyun.oss.com mon.auth.*;
    impor t com.aliyun.oss.com mon.auth.*;
    com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
    java.util.Listをインポートします。public classデモ {
        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";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                ListObjectsV2Result result = null;
                do {
                    // デフォルトでは、一度に100のオブジェクトまたはディレクトリがリストされます。 
                    ListObjectsV2Request request = new ListObjectsV2Request(bucketName).withDelimiter("/").withPrefix(keyPrefix);
                    if (result != null) {
                        request.setContinuationToken(result.getNextContinuationToken());
                    }
                    result = ossClient.listObjectsV2 (リクエスト);
                    リスト <String> folders = result.getCommonPrefixes();
                    for (文字列フォルダ: フォルダ) {
                        System.out.println(folder + " : " + (calculateFolderLength(ossClient, bucketName, folder) / 1024) + "KB");
                    }
                    リスト <OSSObjectSummary> sums = result.getObjectSummaries();
                    for (OSSObjectSummary s : sums) {
                        System.out.println(s.getKey() + " : " + (s.getSize() / 1024) + "KB");
                    }
                } while (result.isTruncated());
            } catch (Exception e) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "しかし、何らかの理由でエラー応答で拒否されました。");
                System.out.println("エラーメッセージ:" + oe.getErrorMessage());
                System.out.println("エラーコード:" + oe.getErrorCode());
                System.out.println("リクエストID:" + oe.getRequestId());
                System.out.println("ホストID:" + oe.getHostId());
            } catch (ClientException e) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + 「ネットワークにアクセスできないなど」;
                System.out.println("エラーメッセージ:" + ce.getMessage());
            } 最後に{
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    
        // バケット内の特定のディレクトリにあるオブジェクトのサイズを一覧表示します。 
        private static long calculateFolderLength(OSS ossClient、String bucketName、Stringフォルダ) {
            ロングサイズ=0L;
            ListObjectsV2Result result = null;
            do {
                // MaxKeysのデフォルト値は100です。 MaxKeysの最大値は1000です。 
                ListObjectsV2Request request = new ListObjectsV2Request(bucketName).withPrefix (フォルダ).withMaxKeys(1000);
                if (result != null) {
                    request.setContinuationToken(result.getNextContinuationToken());
                }
                result = ossClient.listObjectsV2 (リクエスト);
                リスト <OSSObjectSummary> sums = result.getObjectSummaries();
                for (OSSObjectSummary s : sums) {
                    size += s.getSize();
                }
            } while (result.isTruncated());
            return size;
        }
    }

参考資料

  • オブジェクトの一覧表示に使用する完全なサンプルコードについては、『GitHub』をご参照ください。

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