Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:


1. Introduction

In this tutorial, we’ll explore how to check if a specified key exists in an Amazon S3 bucket using Java.

S3 is a popular cloud storage service that provides a scalable, secure, and highly available platform for storing and retrieving data.

It’s essential for developers to know that a specific key exists to manipulate or access it as needed. We’ll walk through the steps required to set up the AWS SDK and use it to perform this check.

2. Maven Dependencies

Before we get started, we need to declare the AWS S3 SDK dependency in our project’s pom.xml:


3. Create an Instance of the AmazonS3 Client

Once we have the AWS SDK for Java set up, we create an instance of the AmazonS3 client to interact with a bucket.

Let’s specify the AWS credentials and the bucket location region and create the client:

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
  .withCredentials(new AWSStaticCredentialsProvider(credentials))

4. Check if the Key Exists With headObject()

The easiest and most obvious way to check if a specific key exists in the S3 bucket is to use the headObject() method.

We need to create a HeadObjectRequest instance using its builder method and pass the bucket name and the object key to it. Then we can pass the request object to the headObject() method.

try {
    HeadObjectRequest headObjectRequest = HeadObjectRequest.builder()


    System.out.println("Object exists");
    return true;
} catch (S3Exception e) {
    if (e.statusCode() == 404) {
        System.out.println("Object does not exist");
        return false;
    } else {
        throw e;

This method checks if an object exists at the specified bucket location and returns a HeadObjectResponse object containing the object metadata. If the specified key does not exist then the method throws NoSuchKeyException.

5. Check if the Key Exists With listObjectsV2()

Another option is to use the listObjectsV2() method. For that, we need to create a ListObjectsV2Request object and pass the bucket name to it. Next, we call the listObjectsV2 method to get back a ListObjectsV2Response. We can then iterate through the contents of the response to check if the desired key is present:

public boolean doesObjectExistByListObjects(String bucketName, String key) {
    ListObjectsV2Request listObjectsV2Request = ListObjectsV2Request.builder()
    ListObjectsV2Response listObjectsV2Response = s3Client.listObjectsV2(listObjectsV2Request);

    return listObjectsV2Response.contents()
        .filter(s3ObjectSummary -> s3ObjectSummary.getValueForField("key", String.class)

While this method may be less efficient than headObject(), it can be helpful when those options are unavailable.

Additionally, listObjectsV2() has the added benefit of allowing us to list multiple objects simultaneously. It may be helpful in specific scenarios.

However, this method can be slower and less efficient due to many iterations. It’s crucial to weigh the tradeoffs and choose the best option for the use case.

6. Conclusion

In this article, we’ve explored several ways to check if a specific key exists in an S3 bucket using AWS SDK for Java.

We’ve learned how to set up the AmazonS3 client and use the headObject() method to check for the existence of a key. We’ve also explored listObjects() methods as alternatives.

Each approach has its advantages and disadvantages, and the choice of which one to use will depend on the specific requirements of the use case.

As always, the complete code of this article is available over on GitHub.

Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

res – Microservices (eBook) (cat=Cloud/Spring Cloud)
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.