Reading AWS s3 Code in Java

I tried to read the file from AWS s3 into my Java code:

  File file = new File("s3n://mybucket/myfile.txt");
  FileInputStream fileInput = new FileInputStream(file);

Then I got an error message:

java.io.FileNotFoundException: s3n: /mybucket/myfile.txt (There is no such file or directory) in java.io.FileInputStream.open (native method) in java.io.FileInputStream. (FileInputStream.java:146)


Is there any way to open / read a file with AWS s3? Many thanks!

+6
source share
2 answers

The File class in Java does not understand that S3 exists. Here is an example of reading a file from AWS documentation :

AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());        
S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, key));
InputStream objectData = object.getObjectContent();
// Process the objectData stream.
objectData.close();
+20
source

In 2019, there is a slightly more optimal way to read a file from S3:

private final AmazonS3 amazonS3Client = AmazonS3ClientBuilder.standard().build();

private Collection<String> loadFileFromS3() {
    try (final S3Object s3Object = amazonS3Client.getObject(BUCKET_NAME,
                                                            FILE_NAME);
         final InputStreamReader streamReader = new InputStreamReader(s3Object.getObjectContent(), StandardCharsets.UTF_8);
         final BufferedReader reader = new BufferedReader(streamReader)) {
        return reader.lines().collect(Collectors.toSet());
    } catch (final IOException e) {
        log.error(e.getMessage(), e)
        return Collections.emptySet();
    }
}
0

All Articles