Lire le fichier AWS s3 en code Java


J'ai essayé de lire un fichier d'AWS s3 dans mon code java:

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

Ensuite, j'ai eu une erreur:

Java.io.FileNotFoundException: s3n:/mybucket/monfichier.txt (Aucun fichier ou répertoire) dans java. io. FileInputStream. open(Méthode native) pour cela, il est nécessaire de créer un lien vers le fichier.io.FileInputStream.(FileInputStream.java:146)


Existe-t-il un moyen d'ouvrir/lire un fichier à partir d'AWS s3? Merci beaucoup!

Author: Edamame, 2015-02-17

4 answers

La classe' File ' de Java ne comprend pas que S3 existe. Voici un exemple de lecture d'un fichier à partir de la documentation AWS :

AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());        
S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, key));
InputStream objectData = object.getObjectContent();
// Process the objectData stream.
objectData.close();
 34
Author: tedder42, 2015-02-17 18:58:14

En 2019, il existe un moyen un peu plus optimal de lire un fichier à partir de 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();
    }
}
 12
Author: Enigo, 2020-04-07 20:48:47

Si le contenu du fichier est une chaîne, vous pouvez utiliser getObjectAsString. Sinon, vous pouvez utiliser IOUtils.toByteArray sur getObjectContent() pour lire le contenu du fichier dans un tableau d'octets.

Évidemment, ceux-ci sont mieux utilisés sur les objets S3 de petite taille qui s'insèrent facilement dans la mémoire.

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

private String loadStringFromS3() {
    try {
        return amazonS3Client.getObjectAsString(BUCKET_NAME, FILE_NAME);
    } catch (final IOException e) {
        log.error(e.getMessage(), e)
        return null;
    }
}

private byte[] loadDataFromS3() {
    try (final S3Object s3Object = amazonS3Client.getObject(BUCKET_NAME, FILE_NAME)) {
        return IOUtils.toByteArray(s3Object.getObjectContent());
    } catch (final IOException e) {
        log.error(e.getMessage(), e)
        return null;
    } finally {
        IOUtils.closeQuietly(object, log);
    }
}
 2
Author: George V. Reilly, 2020-08-25 17:41:43

Les étapes pour lire le fichier S3 en java peuvent être:

  1. Créer AmazonS3Client.
  2. Créez S3Object en utilisant le nom et la clé du compartiment.
  3. Créer un lecteur de tampon en utilisant S3Object et lire le fichier ligne par ligne.

1 >>>

    BasicAWSCredentials awsCreds = new BasicAWSCredentials("accessKey", "secretKey");
    AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
            .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
            .withRegion("region_name_here").build();  

2 >>>

   S3Object object = s3Client.getObject(new GetObjectRequest("bucketName", "key"));

3 >>>

   BufferedReader reader = new BufferedReader(new InputStreamReader(object.getObjectContent()));

    String s = null;
    while ((s = reader.readLine()) != null)
    {
        System.out.println(s);
        //your business logic here
    }

Merci.

 0
Author: Gaurav Raghav, 2020-10-27 11:07:47