繁体   English   中英

如何在AWS S3存储桶中使用Java读取压缩的CSV文件?

[英]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文件:

  1. 从S3获取对象
  2. 用对象的数据创建一个ZipInputStream
  3. 使用ZipInputStream创建阅读器

例:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM