How to check if a specified key exists in a given S3 bucket using Java How to check if a specified key exists in a given S3 bucket using Java java java

How to check if a specified key exists in a given S3 bucket using Java


There's now a doesObjectExist method in the official Java API.

Enjoy!


Update:

It seems there's a new API to check just that. See another answer in this page: https://stackoverflow.com/a/36653034/435605

Original post:

Use errorCode.equals("NoSuchKey")

try {    AmazonS3 s3 = new AmazonS3Client(new ClasspathPropertiesFileCredentialsProvider());    String bucketName = getBucketName();    s3.createBucket(bucketName);    S3Object object = s3.getObject(bucketName, getKey());} catch (AmazonServiceException e) {    String errorCode = e.getErrorCode();    if (!errorCode.equals("NoSuchKey")) {        throw e;    }    Logger.getLogger(getClass()).debug("No such key!!!", e);}

Note about the exception: I know exceptions should not be used for flow control. The problem is that Amazon didn't provide any api to check this flow - just documentation about the exception.


Using the AWS SDK use the getObjectMetadata method. The method will throw an AmazonServiceException if the key doesn't exist.

private AmazonS3 s3;...public boolean exists(String path, String name) {    try {        s3.getObjectMetadata(bucket, getS3Path(path) + name);     } catch(AmazonServiceException e) {        return false;    }    return true;}