[英]Read a file using Java from an S3 bucket and HTTP PUT file to presigned AWS S3 URL of another bucket in a way that simulates an actual file upload
[英]How to read a zipped CSV file using Java inside an AWS S3 bucket?
我有一个要求,我必须从S3存储桶中读取.csv
文件。 我通过实现了它
S3Object s3Obj = amazonS3Client.getObject(bucketname, fileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(s3Obj.getObjectContent()));
现在,相同的.csv
文件以存档(压缩)形式出现在AWS S3存储桶中。 我需要读取此.csv
文件,而无需在服务器端进行解压缩操作。
AWS中是否有任何文档或API可直接读取.csv
文件而无需解压缩?
您可以通过以下步骤直接从Amazon S3中读取压缩的CSV文件:
例:
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
S3Object object = s3Client.getObject("mybucket","myfile.csv.zip");
ZipInputStream in = new ZipInputStream(object.getObjectContent());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
由于zip文件中可能包含许多文件,因此需要将ZipInputStream放在每个ZipEntry的开头,以分别读取每个包含的文件。 (即使您的zip文件中仅包含一个文件,您也需要执行一次以将ZipInputStream放置在单独的ZipEntry的开头。)
String line;
while (in.getNextEntry() != null) { // loop through each file within the zip
while ((line = reader.readLine()) != null) { // loop through each line
System.out.println(line);
}
}
如果在您的示例中s3Obj.getObjectContent()
返回一个ZIP压缩文件流,则应该可以进行类似的操作。
ZipInputStream in = new ZipInputStream(s3Obj.getObjectContent());
while ((entry = in.getNextEntry()) != null) {
System.out.printf("entry: %s%n", entry.getName());
}
in.close();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.