

 AWS SDK for Java 1.x は 2025 年 12 月 31 日にend-of-supportしました。新しい機能、可用性の向上、セキュリティ更新のために、[AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html) に移行することをお勧めします。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon S3 操作の TransferManager の使用
<a name="examples-s3-transfermanager"></a>

AWS SDK for Java TransferManager クラスを使用して、ローカル環境から Amazon S3へファイルを確実に転送し、S3 の複数の場所間でオブジェクトをコピーします。`TransferManager` は、転送の進行状況を取得し、アップロードとダウンロードの一時停止/再開を行うことができます。

**注記**  
ベストプラクティス  
[ バケットで ](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html)AbortIncompleteMultipartUploadAmazon S3 ライフサイクルルールを有効にすることをお勧めします。  
このルールは、開始後、指定された日数内に完了しないマルチパートアップロードを中止するよう Amazon S3 に指示できます。設定した時間制限を超えると、Amazon S3 はアップロードを中止して、不完全なアップロードデータを削除します。  
詳細については、Amazon S3 ユーザーガイドの[バージョニングを使用したバケットのライフサイクル設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-bucket-with-versioning.html)を参照してください。

**注記**  
これらのコード例では、ユーザーが [AWS SDK for Java の使用](basics.md)の内容を理解し、[開発用の AWS 認証情報とリージョンのセットアップ](setup-credentials.md)の情報を使用してデフォルトの AWS 認証情報を設定していることを前提としています。

## ファイルとディレクトリのアップロード
<a name="transfermanager-uploading"></a>

TransferManager は、[以前に作成した](examples-s3-buckets.md#create-bucket) Amazon S3 バケットのいずれに対してもファイル、ファイルリスト、ディレクトリをアップロードできます。

**Topics**
+ [1 つのファイルのアップロード](#transfermanager-upload-file)
+ [ファイルのリストのアップロード](#transfermanager-upload-file-list)
+ [ディレクトリのアップロード](#transfermanager-upload-directory)

### 1 つのファイルのアップロード
<a name="transfermanager-upload-file"></a>

TransferManager の `upload` メソッドを呼び出し、Amazon S3 バケット名、キー (オブジェクト) 名、アップロードするファイルを表す標準 Java [ファイル](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html)オブジェクトを指定します。

 **インポート** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.MultipleFileUpload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
```

 **コード** 

```
File f = new File(file_path);
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Upload xfer = xfer_mgr.upload(bucket_name, key_name, f);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    //  or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

`upload` メソッドは、*即座に*返され、転送の状態を確認する、または、転送が完了するまで待機するための `Upload` オブジェクトが提供されます。

`waitForCompletion` を使用して、転送が正常に完了した後に TransferManager の `shutdownNow` メソッドを呼び出すことの詳細については、[転送の完了の待機](#transfermanager-wait-for-completion)を参照してください。転送の完了を待ちながら、転送の状態や進行状況に関する更新情報をポーリングまたはリスンできます。詳細については、「[転送の状態と進行状況の取得](#transfermanager-get-status-and-progress)」を参照してください。

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrUpload.java) で完全な例をご覧ください。

### ファイルのリストのアップロード
<a name="transfermanager-upload-file-list"></a>

複数のファイルを一括してアップロードするには、TransferManager`uploadFileList` メソッドを呼び出して、以下を指定します。
+ Amazon S3 バケット名
+ 作成したオブジェクトの名前の前に付加される*キープレフィックス* (オブジェクトを置くバケット内のパス)
+ ファイルパスの作成元の相対ディレクトリを表す[ファイル](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html)オブジェクト
+ [リスト](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/List.html)オブジェクト (アップロードする一連の[ファイル](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html)オブジェクトを含む)

 **インポート** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.MultipleFileUpload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
```

 **コード** 

```
ArrayList<File> files = new ArrayList<File>();
for (String path : file_paths) {
    files.add(new File(path));
}

TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    MultipleFileUpload xfer = xfer_mgr.uploadFileList(bucket_name,
            key_prefix, new File("."), files);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

`waitForCompletion` を使用して、転送が正常に完了した後に TransferManager の `shutdownNow` メソッドを呼び出すことの詳細については、[転送の完了の待機](#transfermanager-wait-for-completion)を参照してください。転送の完了を待ちながら、転送の状態や進行状況に関する更新情報をポーリングまたはリスンできます。詳細については、「[転送の状態と進行状況の取得](#transfermanager-get-status-and-progress)」を参照してください。

`uploadFileList` から返される [MultipleFileUpload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileUpload.html) オブジェクトを使用して、転送の状態や進行状況をクエリできます。詳細については、「[転送の現在の進行状況のポーリング](#transfermanager-get-progress-polling)」と「[ProgressListener による転送の進行状況の取得](#transfermanager-progress-listener)」を参照してください。

`MultipleFileUpload` の `getSubTransfers` メソッドを使用して、転送中の各ファイルについて個別の `Upload` オブジェクトを取得することもできます。詳細については、「[サブ転送の進行状況の取得](#transfermanager-get-subtransfer-progress)」を参照してください。

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrUpload.java) で完全な例をご覧ください。

### ディレクトリのアップロード
<a name="transfermanager-upload-directory"></a>

TransferManager の `uploadDirectory` メソッドを使用して、ファイルのディレクトリ全体をアップロードし、オプションとしてファイルをサブディレクトリに再帰的にコピーできます。このメソッドに、Amazon S3 バケット名、S3 キープレフィックス、コピーするローカルディレクトリを表す [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) オブジェクト、およびサブディレクトリに再帰的にコピーするかどうか (`boolean`true* または *false*) を示す * 値を渡します。

 **インポート** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.MultipleFileUpload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
```

 **コード** 

```
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    MultipleFileUpload xfer = xfer_mgr.uploadDirectory(bucket_name,
            key_prefix, new File(dir_path), recursive);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

`waitForCompletion` を使用して、転送が正常に完了した後に TransferManager の `shutdownNow` メソッドを呼び出すことの詳細については、[転送の完了の待機](#transfermanager-wait-for-completion)を参照してください。転送の完了を待ちながら、転送の状態や進行状況に関する更新情報をポーリングまたはリスンできます。詳細については、「[転送の状態と進行状況の取得](#transfermanager-get-status-and-progress)」を参照してください。

`uploadFileList` から返される [MultipleFileUpload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileUpload.html) オブジェクトを使用して、転送の状態や進行状況をクエリできます。詳細については、「[転送の現在の進行状況のポーリング](#transfermanager-get-progress-polling)」と「[ProgressListener による転送の進行状況の取得](#transfermanager-progress-listener)」を参照してください。

`MultipleFileUpload` の `getSubTransfers` メソッドを使用して、転送中の各ファイルについて個別の `Upload` オブジェクトを取得することもできます。詳細については、「[サブ転送の進行状況の取得](#transfermanager-get-subtransfer-progress)」を参照してください。

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrUpload.java) で完全な例をご覧ください。

## ファイルまたはディレクトリのダウンロード
<a name="transfermanager-downloading"></a>

TransferManager クラスを使用して、1 つのファイル (Amazon S3 オブジェクト) またはディレクトリ (Amazon S3 バケット名とオブジェクトプレフィックス) を Amazon S3 からダウンロードできます。

**Topics**
+ [1 つのファイルのダウンロード](#transfermanager-download-file)
+ [ディレクトリのダウンロード](#tranfermanager-download-directory)

### 1 つのファイルのダウンロード
<a name="transfermanager-download-file"></a>

TransferManager の `download` メソッドを使用して、ダウンロードするオブジェクトが含まれている Amazon S3 バケット名、キー (オブジェクト) 名、およびローカルシステムで作成するファイルを表す[ファイル](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html)オブジェクトを渡します。

 **インポート** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.Download;
import com.amazonaws.services.s3.transfer.MultipleFileDownload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;

import java.io.File;
```

 **コード** 

```
File f = new File(file_path);
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Download xfer = xfer_mgr.download(bucket_name, key_name, f);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

`waitForCompletion` を使用して、転送が正常に完了した後に TransferManager の `shutdownNow` メソッドを呼び出すことの詳細については、[転送の完了の待機](#transfermanager-wait-for-completion)を参照してください。転送の完了を待ちながら、転送の状態や進行状況に関する更新情報をポーリングまたはリスンできます。詳細については、「[転送の状態と進行状況の取得](#transfermanager-get-status-and-progress)」を参照してください。

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrDownload.java) で完全な例をご覧ください。

### ディレクトリのダウンロード
<a name="tranfermanager-download-directory"></a>

同じキープレフィックス (ファイルシステムのディレクトリに相当) を共有するファイルのセットを Amazon S3 からダウンロードするには、TransferManager`downloadDirectory` メソッドを呼び出します。このメソッドに、ダウンロードするオブジェクトが含まれている Amazon S3 バケットの名前、すべてのオブジェクトに共有されているオブジェクトプレフィックス、およびローカルシステムにファイルをダウンロードする先のディレクトリを表す [ファイル](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) オブジェクトを渡します。指定したディレクトリがまだない場合は、自動的に作成されます。

 **インポート** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.Download;
import com.amazonaws.services.s3.transfer.MultipleFileDownload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;

import java.io.File;
```

 **コード** 

```
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();

try {
    MultipleFileDownload xfer = xfer_mgr.downloadDirectory(
            bucket_name, key_prefix, new File(dir_path));
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

`waitForCompletion` を使用して、転送が正常に完了した後に TransferManager の `shutdownNow` メソッドを呼び出すことの詳細については、[転送の完了の待機](#transfermanager-wait-for-completion)を参照してください。転送の完了を待ちながら、転送の状態や進行状況に関する更新情報をポーリングまたはリスンできます。詳細については、「[転送の状態と進行状況の取得](#transfermanager-get-status-and-progress)」を参照してください。

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrDownload.java) で完全な例をご覧ください。

## オブジェクトのコピー
<a name="transfermanager-copy-object"></a>

S3 バケット間でオブジェクトをコピーするには、TransferManager`copy` メソッドを使用します。

 **インポート** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.Copy;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
```

 **Code** 

```
System.out.println("Copying s3 object: " + from_key);
System.out.println("      from bucket: " + from_bucket);
System.out.println("     to s3 object: " + to_key);
System.out.println("        in bucket: " + to_bucket);

TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Copy xfer = xfer_mgr.copy(from_bucket, from_key, to_bucket, to_key);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrCopy.java) で完全な例をご覧ください。

## 転送が完了するまで待つ
<a name="transfermanager-wait-for-completion"></a>

転送が完了するまでアプリケーション (またはスレッド) がブロックできる場合、[Transfer](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Transfer.html) インターフェイスの `waitForCompletion` メソッドを使用して転送が完了するまでブロックします。ブロックしないと、例外が発生します。

```
try {
    xfer.waitForCompletion();
} catch (AmazonServiceException e) {
    System.err.println("Amazon service error: " + e.getMessage());
    System.exit(1);
} catch (AmazonClientException e) {
    System.err.println("Amazon client error: " + e.getMessage());
    System.exit(1);
} catch (InterruptedException e) {
    System.err.println("Transfer interrupted: " + e.getMessage());
    System.exit(1);
}
```

* を呼び出す*前に`waitForCompletion`イベントをポーリングする場合、別個のスレッドにポーリング機構を実装する場合、または [ProgressListener](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/event/ProgressListener.html) を使用して非同期的に進行状況の更新を受け取る場合は、転送の進行状況が取得されます。

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrProgress.java) で完全な例をご覧ください。

## 転送の状態および進行状況の取得
<a name="transfermanager-get-status-and-progress"></a>

TransferManager`upload*`、`download*`、`copy` メソッドから返される各クラスは、1 つのファイルまたは複数のファイルの操作であるかどうかに応じて、以下のクラスのいずれかのインスタンスを返します。


**​**  

| Class | 返すクラス | 
| --- | --- | 
|   [Copy] (コピー](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Copy.html)   |   `copy`   | 
|   [をダウンロードします](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Download.html)。  |   `download`   | 
|   [MultipleFileDownload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileDownload.html)   |   `downloadDirectory`   | 
|   [アップロード](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Upload.html)   |   `upload`   | 
|   [MultipleFileUpload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileUpload.html)   |   `uploadFileList`, `uploadDirectory`   | 

これらすべてのクラスは、[Transfer](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Transfer.html) インターフェイスを実装します。`Transfer` は、転送の進行状況の取得や転送の一時停止/再開、および、転送の現在や最終ステータスを取得するのに役立つメソッドを提供します。

**Topics**
+ [転送の現在の進行状況のポーリング](#transfermanager-get-progress-polling)
+ [ProgressListener による転送の進行状況の取得](#transfermanager-progress-listener)
+ [サブ転送の進行状況の取得](#transfermanager-get-subtransfer-progress)

### 転送の現在の進行状況のポーリング
<a name="transfermanager-get-progress-polling"></a>

このループでは、転送の進行状況を出力し、実行時は現在の進行状況を確認し、完了時は最終の状態を出力します。

 **インポート** 

```
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.event.ProgressEvent;
import com.amazonaws.event.ProgressListener;
import com.amazonaws.services.s3.transfer.*;
import com.amazonaws.services.s3.transfer.Transfer.TransferState;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
```

 **Code** 

```
// print the transfer's human-readable description
System.out.println(xfer.getDescription());
// print an empty progress bar...
printProgressBar(0.0);
// update the progress bar while the xfer is ongoing.
do {
    try {
        Thread.sleep(100);
    } catch (InterruptedException e) {
        return;
    }
    // Note: so_far and total aren't used, they're just for
    // documentation purposes.
    TransferProgress progress = xfer.getProgress();
    long so_far = progress.getBytesTransferred();
    long total = progress.getTotalBytesToTransfer();
    double pct = progress.getPercentTransferred();
    eraseProgressBar();
    printProgressBar(pct);
} while (xfer.isDone() == false);
// print the final state of the transfer.
TransferState xfer_state = xfer.getState();
System.out.println(": " + xfer_state);
```

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrProgress.java) で完全な例をご覧ください。

### ProgressListener による転送の進行状況の取得
<a name="transfermanager-progress-listener"></a>

[Transfer](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Transfer.html) インターフェイスの `addProgressListener` メソッドを使用して、[ProgressListener](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/event/ProgressListener.html) を任意の転送にアタッチできます。

[ProgressListener](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/event/ProgressListener.html) は、メソッドとして `progressChanged` だけを必要とし、このメソッドに [ProgressEvent](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/event/ProgressEvent.html) オブジェクトを渡します。このオブジェクトでは、その `getBytes` メソッドを呼び出してオペレーションの総バイト数を取得できます。また、`getBytesTransferred` を呼び出してそれまでに転送されたバイト数を取得できます。

 **インポート** 

```
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.event.ProgressEvent;
import com.amazonaws.event.ProgressListener;
import com.amazonaws.services.s3.transfer.*;
import com.amazonaws.services.s3.transfer.Transfer.TransferState;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
```

 **Code** 

```
File f = new File(file_path);
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Upload u = xfer_mgr.upload(bucket_name, key_name, f);
    // print an empty progress bar...
    printProgressBar(0.0);
    u.addProgressListener(new ProgressListener() {
        public void progressChanged(ProgressEvent e) {
            double pct = e.getBytesTransferred() * 100.0 / e.getBytes();
            eraseProgressBar();
            printProgressBar(pct);
        }
    });
    // block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(u);
    // print the final state of the transfer.
    TransferState xfer_state = u.getState();
    System.out.println(": " + xfer_state);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrProgress.java) で完全な例をご覧ください。

### サブ転送の進行状況の取得
<a name="transfermanager-get-subtransfer-progress"></a>

[MultipleFileUpload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileUpload.html) クラスは、その `getSubTransfers` メソッドを呼び出してサブ転送に関する情報を返すことができます。[アップロード](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Upload.html)オブジェクトの変更不能な[コレクション](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Collection.html)を返して、サブ転送ごとの転送の状態と進行状況を提供します。

 **インポート** 

```
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.event.ProgressEvent;
import com.amazonaws.event.ProgressListener;
import com.amazonaws.services.s3.transfer.*;
import com.amazonaws.services.s3.transfer.Transfer.TransferState;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
```

 **Code** 

```
Collection<? extends Upload> sub_xfers = new ArrayList<Upload>();
sub_xfers = multi_upload.getSubTransfers();

do {
    System.out.println("\nSubtransfer progress:\n");
    for (Upload u : sub_xfers) {
        System.out.println("  " + u.getDescription());
        if (u.isDone()) {
            TransferState xfer_state = u.getState();
            System.out.println("  " + xfer_state);
        } else {
            TransferProgress progress = u.getProgress();
            double pct = progress.getPercentTransferred();
            printProgressBar(pct);
            System.out.println();
        }
    }

    // wait a bit before the next update.
    try {
        Thread.sleep(200);
    } catch (InterruptedException e) {
        return;
    }
} while (multi_upload.isDone() == false);
// print the final state of the transfer.
TransferState xfer_state = multi_upload.getState();
System.out.println("\nMultipleFileUpload " + xfer_state);
```

[GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrProgress.java) で完全な例をご覧ください。

## 詳細
<a name="transfermanager-see-also"></a>
+  Amazon Simple Storage Service ユーザーガイドの[オブジェクトキー](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html)