簡體   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