--- title: "AWS SDK for Java" slug: "storage-storage-8-1" tags: ["Object Storage"] updated: 2026-10-08T06:55:44Z published: 2026-10-08T06:55:44Z canonical: "guide.ncloud-docs.com/storage-storage-8-1" --- > ## Documentation Index > Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # AWS SDK for Java Available in Classic and VPC ## SDK for S3 API for Java This is an example using Object Storage of NAVER Cloud Platform using SDK for Java provided by AWS S3. The example is based on AWS Java SDK 1.11.238 version. ### Install SDK You can manually download the SDK source or install it using Apache Maven. - Downloading manually AWS Java SDK GitHub: [https://github.com/aws/aws-sdk-java/tree/master/aws-java-sdk-s3](https://github.com/aws/aws-sdk-java/tree/master/aws-java-sdk-s3) - Using Apache Maven pom.xml ``` com.amazonaws aws-java-sdk-s3 1.11.238 ``` ### Example Note You should enter the registered API authentication key information for the accessKey and secretKey values used in the example. #### Create bucket ``` final String endPoint = "https://kr.object.ncloudstorage.com"; final String regionName = "kr-standard"; final String accessKey = "ACCESS_KEY"; final String secretKey = "SECRET_KEY"; // S3 client final AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, regionName)) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) .build(); String bucketName = "sample-bucket"; try { // create bucket if the bucket name does not exist if (s3.doesBucketExistV2(bucketName)) { System.out.format("Bucket %s already exists.\n", bucketName); } else { s3.createBucket(bucketName); System.out.format("Bucket %s has been created.\n", bucketName); } } catch (AmazonS3Exception e) { e.printStackTrace(); } catch(SdkClientException e) { e.printStackTrace(); } ``` #### View bucket lists ``` final String endPoint = "https://kr.object.ncloudstorage.com"; final String regionName = "kr-standard"; final String accessKey = "ACCESS_KEY"; final String secretKey = "SECRET_KEY"; // S3 client final AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, regionName)) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) .build(); try { List buckets = s3.listBuckets(); System.out.println("Bucket List: "); for (Bucket bucket: buckets) { System.out.println(" name=" + bucket.getName() + ", creation_date=" + bucket.getCreationDate() + ", owner=" + bucket.getOwner().getId()); } } catch (AmazonS3Exception e) { e.printStackTrace(); } catch(SdkClientException e) { e.printStackTrace(); } ``` #### Delete bucket ``` final String endPoint = "https://kr.object.ncloudstorage.com"; final String regionName = "kr-standard"; final String accessKey = "ACCESS_KEY"; final String secretKey = "SECRET_KEY"; // S3 client final AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, regionName)) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) .build(); String bucketName = "sample-bucket"; try { // delete bucket if the bucket exists if (s3.doesBucketExistV2(bucketName)) { // delete all objects ObjectListing objectListing = s3.listObjects(bucketName); while (true) { for (Iterator iterator = objectListing.getObjectSummaries().iterator(); iterator.hasNext();) { S3ObjectSummary summary = (S3ObjectSummary)iterator.next(); s3.deleteObject(bucketName, summary.getKey()); } if (objectListing.isTruncated()) { objectListing = s3.listNextBatchOfObjects(objectListing); } else { break; } } // abort incomplete multipart uploads MultipartUploadListing multipartUploadListing = s3.listMultipartUploads(new ListMultipartUploadsRequest(bucketName)); while (true) { for (Iterator iterator = multipartUploadListing.getMultipartUploads().iterator(); iterator.hasNext();) { MultipartUpload multipartUpload = (MultipartUpload)iterator.next(); s3.abortMultipartUpload(new AbortMultipartUploadRequest(bucketName, multipartUpload.getKey(), multipartUpload.getUploadId())); } if (multipartUploadListing.isTruncated()) { ListMultipartUploadsRequest listMultipartUploadsRequest = new ListMultipartUploadsRequest(bucketName); listMultipartUploadsRequest.withUploadIdMarker(multipartUploadListing.getNextUploadIdMarker()); multipartUploadListing = s3.listMultipartUploads(listMultipartUploadsRequest); } else { break; } } s3.deleteBucket(bucketName); System.out.format("Bucket %s has been deleted.\n", bucketName); } else { System.out.format("Bucket %s does not exist.\n", bucketName); } } catch (AmazonS3Exception e) { e.printStackTrace(); } catch(SdkClientException e) { e.printStackTrace(); } ``` #### Upload files ``` final String endPoint = "https://kr.object.ncloudstorage.com"; final String regionName = "kr-standard"; final String accessKey = "ACCESS_KEY"; final String secretKey = "SECRET_KEY"; // S3 client final AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, regionName)) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) .build(); String bucketName = "sample-bucket"; // create folder String folderName = "sample-folder/"; ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentLength(0L); objectMetadata.setContentType("application/x-directory"); PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, folderName, new ByteArrayInputStream(new byte[0]), objectMetadata); try { s3.putObject(putObjectRequest); System.out.format("Folder %s has been created.\n", folderName); } catch (AmazonS3Exception e) { e.printStackTrace(); } catch(SdkClientException e) { e.printStackTrace(); } // upload local file String objectName = "sample-object"; String filePath = "/tmp/sample.txt"; try { s3.putObject(bucketName, objectName, new File(filePath)); System.out.format("Object %s has been created.\n", objectName); } catch (AmazonS3Exception e) { e.printStackTrace(); } catch(SdkClientException e) { e.printStackTrace(); } ``` #### View file lists ``` final String endPoint = "https://kr.object.ncloudstorage.com"; final String regionName = "kr-standard"; final String accessKey = "ACCESS_KEY"; final String secretKey = "SECRET_KEY"; // S3 client final AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, regionName)) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) .build(); String bucketName = "sample-bucket"; // list all in the bucket try { ListObjectsRequest listObjectsRequest = new ListObjectsRequest() .withBucketName(bucketName) .withMaxKeys(300); ObjectListing objectListing = s3.listObjects(listObjectsRequest); System.out.println("Object List:"); while (true) { for (S3ObjectSummary objectSummary: objectListing.getObjectSummaries()) { System.out.println(" name=" + objectSummary.getKey() + ", size=" + objectSummary.getSize() + ", owner=" + objectSummary.getOwner().getId()); } if (objectListing.isTruncated()) { objectListing = s3.listNextBatchOfObjects(objectListing); } else { break; } } } catch (AmazonS3Exception e) { System.err.println(e.getErrorMessage()); System.exit(1); } // top level folders and files in the bucket try { ListObjectsRequest listObjectsRequest = new ListObjectsRequest() .withBucketName(bucketName) .withDelimiter("/") .withMaxKeys(300); ObjectListing objectListing = s3.listObjects(listObjectsRequest); System.out.println("Folder List:"); for (String commonPrefixes: objectListing.getCommonPrefixes()) { System.out.println(" name=" + commonPrefixes); } System.out.println("File List:"); for (S3ObjectSummary objectSummary: objectListing.getObjectSummaries()) { System.out.println(" name=" + objectSummary.getKey() + ", size=" + objectSummary.getSize() + ", owner=" + objectSummary.getOwner().getId()); } } catch (AmazonS3Exception e) { e.printStackTrace(); } catch(SdkClientException e) { e.printStackTrace(); } ``` #### Download files ``` final String endPoint = "https://kr.object.ncloudstorage.com"; final String regionName = "kr-standard"; final String accessKey = "ACCESS_KEY"; final String secretKey = "SECRET_KEY"; // S3 client final AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, regionName)) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) .build(); String bucketName = "sample-bucket"; String objectName = "sample-object.txt"; String downloadFilePath = "/tmp/sample-object.txt"; // download object try { S3Object s3Object = s3.getObject(bucketName, objectName); S3ObjectInputStream s3ObjectInputStream = s3Object.getObjectContent(); OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(downloadFilePath)); byte[] bytesArray = new byte[4,096]; int bytesRead = -1; while ((bytesRead = s3ObjectInputStream.read(bytesArray)) != -1) { outputStream.write(bytesArray, 0, bytesRead); } outputStream.close(); s3ObjectInputStream.close(); System.out.format("Object %s has been downloaded.\n", objectName); } catch (AmazonS3Exception e) { e.printStackTrace(); } catch(SdkClientException e) { e.printStackTrace(); } ``` #### Delete files ``` final String endPoint = "https://kr.object.ncloudstorage.com"; final String regionName = "kr-standard"; final String accessKey = "ACCESS_KEY"; final String secretKey = "SECRET_KEY"; // S3 client final AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, regionName)) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) .build(); String bucketName = "sample-bucket"; String objectName = "sample-object"; // delete object try { s3.deleteObject(bucketName, objectName); System.out.format("Object %s has been deleted.\n", objectName); } catch (AmazonS3Exception e) { e.printStackTrace(); } catch(SdkClientException e) { e.printStackTrace(); } ``` #### Set ACL ``` final String endPoint = "https://kr.object.ncloudstorage.com"; final String regionName = "kr-standard"; final String accessKey = "ACCESS_KEY"; final String secretKey = "SECRET_KEY"; // S3 client final AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, regionName)) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) .build(); String bucketName = "sample-bucket"; // set bucket ACL try { // get the current ACL AccessControlList accessControlList = s3.getBucketAcl(bucketName); // add read permission to anonymous accessControlList.grantPermission(GroupGrantee.AllUsers, Permission.Read); s3.setBucketAcl(bucketName, accessControlList); } catch (AmazonS3Exception e) { System.err.println(e.getErrorMessage()); System.exit(1); } String objectName = "sample-object"; String userId = "test-user-02"; // set object ACL try { // get the current ACL AccessControlList accessControlList = s3.getObjectAcl(bucketName, objectName); // add read permission to user by ID accessControlList.grantPermission(new CanonicalGrantee(userId), Permission.Read); s3.setObjectAcl(bucketName, objectName, accessControlList); } catch (AmazonS3Exception e) { e.printStackTrace(); } catch(SdkClientException e) { e.printStackTrace(); } ``` #### Upload multiparts Caution If upload of multiparts is not completed, residual files remain in the bucket. The residual files are included in the bucket capacity and charged. Please be cautioned that the following method to prevent unnecessary charges by deleting incomplete multipart objects. 1. Receive notifications for incomplete multipart upload objects through Cloud Advisor 1. For more information on Cloud Advisor, see the [Cloud Advisor user guide](https://guide.ncloud-docs.com/docs/en/cloudadvisor-overview). 2. Check and delete incomplete multipart objects 1. View information on canceled or uncompleted multipart upload: [ListMultipartUploads API guide](https://api.ncloud-docs.com/docs/en/storage-objectstorage-listmultipartuploads) 2. Delete multipart: [AbortMultipartUpload API guide](https://api.ncloud-docs.com/docs/en/storage-objectstorage-abortmultipartupload) ``` final String endPoint = "https://kr.object.ncloudstorage.com"; final String regionName = "kr-standard"; final String accessKey = "ACCESS_KEY"; final String secretKey = "SECRET_KEY"; // S3 client final AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, regionName)) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) .build(); String bucketName = "sample-bucket"; String objectName = "sample-large-object"; File file = new File("/tmp/sample.file"); long contentLength = file.length(); long partSize = 10 * 1,024 * 1,024; try { // initialize and get upload ID InitiateMultipartUploadResult initiateMultipartUploadResult = s3.initiateMultipartUpload(new InitiateMultipartUploadRequest(bucketName, objectName)); String uploadId = initiateMultipartUploadResult.getUploadId(); // upload parts List partETagList = new ArrayList(); long fileOffset = 0; for (int i = 1; fileOffset < contentLength; i++) { partSize = Math.min(partSize, (contentLength - fileOffset)); UploadPartRequest uploadPartRequest = new UploadPartRequest() .withBucketName(bucketName) .withKey(objectName) .withUploadId(uploadId) .withPartNumber(i) .withFile(file) .withFileOffset(fileOffset) .withPartSize(partSize); UploadPartResult uploadPartResult = s3.uploadPart(uploadPartRequest); partETagList.add(uploadPartResult.getPartETag()); fileOffset += partSize; } // abort // s3.abortMultipartUpload(new AbortMultipartUploadRequest(bucketName, objectName, uploadId)); // complete CompleteMultipartUploadResult completeMultipartUploadResult = s3.completeMultipartUpload(new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETagList)); } catch (AmazonS3Exception e) { e.printStackTrace(); } catch(SdkClientException e) { e.printStackTrace(); } ``` #### Request encryption (SSE-C) using keys provided by customers Note Some requests are not available in the console if the object is encrypted based on SSE-C. ``` final String endPoint = "https://kr.object.ncloudstorage.com"; final String regionName = "kr-standard"; final String accessKey = "ACCESS_KEY"; final String secretKey = "SECRET_KEY"; // S3 client final AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, regionName)) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) .build(); // create encryption key KeyGenerator KEY_GENERATOR = KeyGenerator.getInstance("AES"); KEY_GENERATOR.init(256, new SecureRandom()); final SSECustomerKey SSE_KEY = new SSECustomerKey(KEY_GENERATOR.generateKey()); String bucketName = "sample-bucket"; // upload local file String objectName = "sample-object"; String filePath = "/tmp/sample.txt"; try { PutObjectRequest putRequest = new PutObjectRequest(bucketName, objectName, new File(filePath)) .withSSECustomerKey(SSE_KEY); s3.putObject(putRequest); System.out.format("Object %s has been created.\n", objectName); } catch (AmazonS3Exception e) { e.printStackTrace(); } catch(SdkClientException e) { e.printStackTrace(); } // download object String downloadPath = "/tmp/sample-object"; try { GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectName) .withSSECustomerKey(SSE_KEY); S3Object s3Object = s3.getObject(getObjectRequest); S3ObjectInputStream s3ObjectInputStream = s3Object.getObjectContent(); OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(downloadPath)); byte[] bytesArray = new byte[4,096]; int bytesRead = -1; while ((bytesRead = s3ObjectInputStream.read(bytesArray)) != -1) { outputStream.write(bytesArray, 0, bytesRead); } outputStream.close(); s3ObjectInputStream.close(); System.out.format("Object %s has been downloaded.\n", objectName); } catch (AmazonS3Exception e) { e.printStackTrace(); } catch(SdkClientException e) { e.printStackTrace(); } ``` #### Set cross-origin resource sharing (CORS) ``` final String endPoint = "https://kr.object.ncloudstorage.com"; final String regionName = "kr-standard"; final String accessKey = "ACCESS_KEY"; final String secretKey = "SECRET_KEY"; // S3 client final AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, regionName)) .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) .build(); String bucketName = "sample-bucket"; // Create CORS rules. List methodRule = new ArrayList(); methodRule.add(CORSRule.AllowedMethods.PUT); methodRule.add(CORSRule.AllowedMethods.GET); methodRule.add(CORSRule.AllowedMethods.POST); CORSRule rule = new CORSRule().withId("CORSRule") .withAllowedMethods(methodRule) .withAllowedHeaders(Arrays.asList(new String[] { "*" })) .withAllowedOrigins(Arrays.asList(new String[] { "*" })) .withMaxAgeSeconds(3,000); List rules = new ArrayList(); rules.add(rule); // Add rules to new CORS configuration. BucketCrossOriginConfiguration configuration = new BucketCrossOriginConfiguration(); configuration.setRules(rules); // Set the rules to CORS configuration. s3.setBucketCrossOriginConfiguration(bucketName, configuration); // Get the rules for CORS configuration. configuration = s3.getBucketCrossOriginConfiguration(bucketName); if (configuration == null) { System.out.println("Configuration is null."); } else { System.out.println("Configuration has " + configuration.getRules().size() + " rules\n"); for (CORSRule getRule: configuration.getRules()) { System.out.println("Rule ID: " + getRule.getId()); System.out.println("MaxAgeSeconds: " + getRule.getMaxAgeSeconds()); System.out.println("AllowedMethod: " + getRule.getAllowedMethods()); System.out.println("AllowedOrigins: " + getRule.getAllowedOrigins()); System.out.println("AllowedHeaders: " + getRule.getAllowedHeaders()); System.out.println("ExposeHeader: " + getRule.getExposedHeaders()); System.out.println(); } } ```