我有一个要求,我必须从S3存储桶中读取.csv
文件。我是通过
S3Object s3Obj = amazonS3Client.getObject(bucketname, fileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(s3Obj.getObjectContent()));
现在,相同的.csv
文件采用AWS S3存储桶中的归档(压缩)格式。我需要在服务器端读取此.csv
文件而不进行解压缩操作。
AWS中是否有任何文档或API可以直接读取.csv
文件而不解压缩?
答案 0 :(得分:2)
您可以使用以下步骤直接从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);
}
}
答案 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();