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

时间:2015-01-27 12:21:42

标签: java csv amazon-web-services amazon-s3

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

实现的
S3Object s3Obj = amazonS3Client.getObject(bucketname, fileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(s3Obj.getObjectContent())); 

现在,相同的.csv文件采用AWS S3存储桶中的归档(压缩)格式。我需要在服务器端读取此.csv文件而不进行解压缩操作。

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

2 个答案:

答案 0 :(得分:2)

您可以使用以下步骤直接从Amazon S3读取压缩的CSV文件:

  1. 从S3获取对象
  2. 使用对象的数据
  3. 创建ZipInputStream
  4. 使用ZipInputStream
  5. 创建一个Reader

    示例:

    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);
        }
    }
    

答案 1 :(得分:1)

如果在您的示例中s3Obj.getObjectContent()返回ZIP压缩文件流,那么类似的东西应该可以访问它。

ZipInputStream in = new ZipInputStream(s3Obj.getObjectContent());
while ((entry = in.getNextEntry()) != null) {
    System.out.printf("entry: %s%n", entry.getName());
}
in.close();