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!
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();
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();
}
}
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);
}
}
Les étapes pour lire le fichier S3 en java peuvent être:
- Créer AmazonS3Client.
- Créez S3Object en utilisant le nom et la clé du compartiment.
- 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.