

 適用於 Java 的 AWS SDK 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 儲存貯體
<a name="examples-s3-buckets"></a>

中的每個物件 （檔案） Amazon S3 都必須位於代表物件集合 （容器） 的*儲存貯*體中。每個儲存貯體都是由索引*鍵* （名稱） 所知道，該索引鍵必須是唯一的。如需儲存貯體及其組態的詳細資訊，請參閱 Amazon Simple Storage Service 《 使用者指南》中的[使用 Amazon S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html)。

**注意**  
最佳實務  
建議您在 Amazon S3 儲存貯體上啟用 [AbortIncompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html) 生命週期規則。  
此規則 Amazon S3 會指示 中止未在啟動後指定天數內完成的分段上傳。超過設定的時間限制時， 會 Amazon S3 中止上傳，然後刪除不完整的上傳資料。  
如需詳細資訊，請參閱 Amazon S3 《 使用者指南》中的[使用版本控制的儲存貯體生命週期組態](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-bucket-with-versioning.html)。

**注意**  
這些程式碼範例假設您了解[使用 適用於 Java 的 AWS SDK](basics.md) 中的資料，並使用設定 AWS 登入資料[和開發區域中的資訊來設定預設 AWS 登入](setup-credentials.md)資料。

## 建立儲存貯體
<a name="create-bucket"></a>

使用 AmazonS3 用戶端的 `createBucket`方法。傳回新的[儲存貯體](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/Bucket.html)。如果儲存貯體已存在，則 `createBucket`方法將引發例外狀況。

**注意**  
若要在嘗試建立具有相同名稱的儲存貯體之前檢查儲存貯體是否已存在，請呼叫 `doesBucketExist`方法。`true` 如果儲存貯體存在，則會傳回 ，`false`否則傳回 。

 **匯入** 

```
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.Bucket;

import java.util.List;
```

 **Code** 

```
if (s3.doesBucketExistV2(bucket_name)) {
    System.out.format("Bucket %s already exists.\n", bucket_name);
    b = getBucket(bucket_name);
} else {
    try {
        b = s3.createBucket(bucket_name);
    } catch (AmazonS3Exception e) {
        System.err.println(e.getErrorMessage());
    }
}
return b;
```

請參閱 GitHub 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/CreateBucket.java)。

## 列出儲存貯體
<a name="list-buckets"></a>

使用 AmazonS3 用戶端的 `listBucket`方法。如果成功，則會傳回[儲存貯體](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/Bucket.html)清單。

 **匯入** 

```
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket;

import java.util.List;
```

 **Code** 

```
List<Bucket> buckets = s3.listBuckets();
System.out.println("Your {S3} buckets are:");
for (Bucket b : buckets) {
    System.out.println("* " + b.getName());
}
```

請參閱 GitHub 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/ListBuckets.java)。

## 刪除儲存貯體
<a name="delete-bucket"></a>

您必須先確認儲存 Amazon S3 貯體為空，否則將發生錯誤，才能刪除儲存貯體。如果您有[版本控制的儲存貯](https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html)體，您也必須刪除與儲存貯體相關聯的任何版本控制的物件。

**注意**  
[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteBucket.java)依序包含這些步驟，提供刪除 儲存 Amazon S3 貯體及其內容的完整解決方案。

**Topics**
+ [

### 從未版本控制的儲存貯體移除物件，然後再刪除
](#remove-objects-from-an-unversioned-bucket-before-deleting-it)
+ [

### 從已版本控制的儲存貯體移除物件，然後再將其刪除
](#remove-objects-from-a-versioned-bucket-before-deleting-it)
+ [

### 刪除空的儲存貯體
](#delete-an-empty-bucket)

### 從未版本控制的儲存貯體移除物件，然後再刪除
<a name="remove-objects-from-an-unversioned-bucket-before-deleting-it"></a>

使用 AmazonS3 用戶端的 `listObjects`方法擷取物件清單`deleteObject`，並刪除每個物件清單。

 **匯入** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.util.Iterator;
```

 **Code** 

```
System.out.println(" - removing objects from bucket");
ObjectListing object_listing = s3.listObjects(bucket_name);
while (true) {
    for (Iterator<?> iterator =
         object_listing.getObjectSummaries().iterator();
         iterator.hasNext(); ) {
        S3ObjectSummary summary = (S3ObjectSummary) iterator.next();
        s3.deleteObject(bucket_name, summary.getKey());
    }

    // more object_listing to retrieve?
    if (object_listing.isTruncated()) {
        object_listing = s3.listNextBatchOfObjects(object_listing);
    } else {
        break;
    }
}
```

請參閱 GitHub 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteBucket.java)。

### 從已版本控制的儲存貯體移除物件，然後再將其刪除
<a name="remove-objects-from-a-versioned-bucket-before-deleting-it"></a>

如果您使用的是[版本控制的儲存貯](https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html)體，您也需要移除儲存貯體中物件的任何存放版本，才能刪除儲存貯體。

使用類似於移除儲存貯體中物件時所使用的模式，透過使用 AmazonS3 用戶端的 `listVersions`方法來列出任何版本控制的物件，然後刪除每個物件`deleteVersion`，以移除版本控制的物件。

 **匯入** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.util.Iterator;
```

 **Code** 

```
System.out.println(" - removing versions from bucket");
VersionListing version_listing = s3.listVersions(
        new ListVersionsRequest().withBucketName(bucket_name));
while (true) {
    for (Iterator<?> iterator =
         version_listing.getVersionSummaries().iterator();
         iterator.hasNext(); ) {
        S3VersionSummary vs = (S3VersionSummary) iterator.next();
        s3.deleteVersion(
                bucket_name, vs.getKey(), vs.getVersionId());
    }

    if (version_listing.isTruncated()) {
        version_listing = s3.listNextBatchOfVersions(
                version_listing);
    } else {
        break;
    }
}
```

請參閱 GitHub 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteBucket.java)。

### 刪除空的儲存貯體
<a name="delete-an-empty-bucket"></a>

從儲存貯體移除物件後 （包括任何版本控制的物件），您可以使用 AmazonS3 用戶端的 `deleteBucket`方法刪除儲存貯體本身。

 **匯入** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.util.Iterator;
```

 **Code** 

```
System.out.println(" OK, bucket ready to delete!");
s3.deleteBucket(bucket_name);
```

請參閱 GitHub 上的[完整範例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteBucket.java)。