Je voudrais vérifier si une clé existe dans un compartiment donné à l'aide de Java. J'ai regardé l'API mais il n'y a pas de méthodes utiles. J'ai essayé d'utiliser getObject
mais cela a généré une exception.
Réponses
Trop de publicités?Mettre à jour:
Il semble qu'il y ait une nouvelle API pour vérifier cela. Voir une autre réponse dans cette page : https://stackoverflow.com/a/36653034/435605
Message d'origine :
Utiliser errorCode.equals("NoSuchKey")
try {
AmazonS3 s3 = new AmazonS3Client(new ClasspathPropertiesFileCredentialsProvider());
String bucketName = getBucketName();
s3.createBucket(bucketName);
S3Object object = s3.getObject(bucketName, getKey());
} catch (AmazonServiceException e) {
String errorCode = e.getErrorCode();
if (!errorCode.equals("NoSuchKey")) {
throw e;
}
Logger.getLogger(getClass()).debug("No such key!!!", e);
}
Remarque sur l'exception : je sais que les exceptions ne doivent pas être utilisées pour le contrôle de flux. Le problème est qu'Amazon n'a fourni aucune API pour vérifier ce flux - juste une documentation sur l'exception.
À l'aide du kit SDK AWS, utilisez la méthode getObjectMetadata. La méthode lèvera une AmazonServiceException si la clé n'existe pas.
private AmazonS3 s3;
...
public boolean exists(String path, String name) {
try {
s3.getObjectMetadata(bucket, getS3Path(path) + name);
} catch(AmazonServiceException e) {
return false;
}
return true;
}