[英]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.