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

moh*_*yas 2 java csv amazon-s3 amazon-web-services

我有一个要求,我必须.csv从 S3 存储桶中读取文件。我通过

S3Object s3Obj = amazonS3Client.getObject(bucketname, fileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(s3Obj.getObjectContent())); 
Run Code Online (Sandbox Code Playgroud)

现在,同一.csv文件以存档(压缩)形式出现在 AWS S3 存储桶中。我需要阅读这个.csv在服务器端文件而不进行解压缩操作。

AWS 中是否有任何文档或 API 可以.csv直接读取文件而无需解压缩?

Cra*_*eil 5

您可以通过以下步骤直接从 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));  
Run Code Online (Sandbox Code Playgroud)

由于 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);
    }
}
Run Code Online (Sandbox Code Playgroud)