AWS SDK for Java
開発者ガイド

Amazon S3 オブジェクトに対するオペレーションの実行

Amazon S3 オブジェクトは、ファイルまたはデータの集合を表します。すべてのオブジェクトがバケット内にある必要があります。

注記

これらのコード例では、ユーザーが「AWS SDK for Java の使用」の内容を理解し、「開発用の AWS 認証情報とリージョンのセットアップ」の情報を使用してデフォルトの AWS 認証情報を設定していることを前提としています。

オブジェクトのアップロード

AmazonS3 クライアントの putObject メソッドを使用して、バケット名、キー名、アップロードするファイルを指定します。バケットが存在している必要があり、存在しない場合はエラーが発生します

インポート

import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.AmazonServiceException; import java.io.File;

コード

System.out.format("Uploading %s to S3 bucket %s...\n", file_path, bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { s3.putObject(bucket_name, key_name, new File(file_path)); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

GitHub で完全な例をご覧ください。

オブジェクトのリスト化

バケット内のオブジェクトのリストを取得するには、AmazonS3 クライアントの listObjects メソッドを使用して、バケット名を指定します。

listObjects メソッドは、バケットのオブジェクトに関する情報を提供する ObjectListing オブジェクトを返します。オブジェクト名 (キー) を一覧表示するには、getObjectSummaries メソッドを使用して、それぞれがバケット内の単一のオブジェクトを表す S3ObjectSummary オブジェクトのリストを取得し、 メソッドを呼び出してオブジェクト名を取得します。それから、getKey メソッドを呼び出してオブジェクト名を取得します。

インポート

import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListObjectsV2Result; import com.amazonaws.services.s3.model.S3ObjectSummary; import java.util.List;

コード

final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); ListObjectsV2Result result = s3.listObjectsV2(bucket_name); List<S3ObjectSummary> objects = result.getObjectSummaries(); for (S3ObjectSummary os: objects) { System.out.println("* " + os.getKey()); }

GitHub で完全な例をご覧ください。

オブジェクトのダウンロード

AmazonS3 クライアントの getObject メソッドを使用して、ダウンロードするバケットの名前とオブジェクトを渡します。成功すると、このメソッドによって S3Object が返されます。指定されたバケットとオブジェクトキーが存在している必要があり、存在しない場合エラーが発生します

オブジェクトのコンテンツは、S3ObjectgetObjectContent を呼び出して取得できます。これによって、標準 Java InputStream オブジェクトとして動作する S3ObjectInputStream が返されます。

次の例では、S3 からオブジェクトをダウンロードし、そのコンテンツをファイルに保存します (オブジェクトキーと同じ名前を使用)。

インポート

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.S3Object; import com.amazonaws.services.s3.model.S3ObjectInputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;

コード

final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { S3Object o = s3.getObject(bucket_name, key_name); S3ObjectInputStream s3is = o.getObjectContent(); FileOutputStream fos = new FileOutputStream(new File(key_name)); byte[] read_buf = new byte[1024]; int read_len = 0; while ((read_len = s3is.read(read_buf)) > 0) { fos.write(read_buf, 0, read_len); } s3is.close(); fos.close(); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } catch (FileNotFoundException e) { System.err.println(e.getMessage()); System.exit(1); } catch (IOException e) { System.err.println(e.getMessage()); System.exit(1); }

GitHub で完全な例をご覧ください。

オブジェクトのコピー、移動、または名前の変更

AmazonS3 クライアントの copyObject メソッドを使用して、1 つのバケットから別のバケットへオブジェクトをコピーできます。コピー元のバケットの名前、コピーするオブジェクト、およびコピー先バケットと名前が継承されます。

インポート

import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.AmazonServiceException;

コード

final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { s3.copyObject(from_bucket, object_key, to_bucket, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

GitHub で完全な例をご覧ください。

注記

copyObjectdeleteObject とともに使用して、最初にオブジェクトを新しい名前でコピーし (コピー元とコピー先の両方に同じバケットの使用が可能)、元の場所からそのオブジェクトを削除することで、オブジェクトの移動または名前変更ができます。

オブジェクトの削除

AmazonS3 クライアントの deleteObject メソッドを使用して、削除するバケットの名前とオブジェクトを渡します。指定されたバケットとオブジェクトキーが存在している必要があり、存在しない場合エラーが発生します

インポート

import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.AmazonServiceException;

コード

final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { s3.deleteObject(bucket_name, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

GitHub で完全な例をご覧ください。

複数オブジェクトの一括削除

AmazonS3 クライアントの deleteObjects メソッドを使用して、DeleteObjectRequest withKeys メソッドに名前を渡すことで、同じバケットから複数のオブジェクトを削除できます。

インポート

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.DeleteObjectsRequest;

コード

final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { DeleteObjectsRequest dor = new DeleteObjectsRequest(bucket_name) .withKeys(object_keys); s3.deleteObjects(dor); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

GitHub で完全な例をご覧ください。