【问题标题】:有没有办法使用Java从S3读取csv文件而不下载它
【发布时间】:2022-01-23 11:16:41
【问题描述】:

我能够将 Java 连接到 AWS S3,并且能够执行基本操作,例如列出存储桶。我需要一种无需下载即可读取 CSV 文件的方法。我在这里附上我当前的代码。

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.S3ObjectSummary;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Properties;

public class test {

    public static void main(String args[])throws IOException
    {

        AWSCredentials credentials =new BasicAWSCredentials("----","----");

        AmazonS3 s3client = AmazonS3ClientBuilder
                .standard()
                .withCredentials(new AWSStaticCredentialsProvider(credentials))
                .withRegion(Regions.US_EAST_2)
                .build();

        List<Bucket> buckets = s3client.listBuckets();
        for(Bucket bucket : buckets) {
            System.out.println(bucket.getName());
        }
    }

}

【问题讨论】:

  • 我认为你做不到。 S3 只是一个存储服务——你可以从 S3 上传、下载或删除对象——但不确定是否有任何我不知道的方法。
  • “下载”是什么意思?您将需要下载文件内容以在本地处理它,但如果您还指“在处理之前将其保存在(临时)文件中”,那么只要您正在做的任何事情都接受输入流(或读者)。

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


【解决方案1】:

为了让您的代码读取文件,它需要内容——这意味着将其复制到本地系统。

但是,您可以使用"range" (Java) 只读取一部分。

【讨论】:

    【解决方案2】:

    有一种方法可以使用这样的代码。在我的代码中,我试图在我的 S3Object obj 中获取我们想要读取的文件,然后将该文件传递给 InputStreamReader()

    S3Object Obj = s3client.getObject("<Bucket Name>", "File Name");
    BufferedReader reader = new BufferedReader(new InputStreamReader(Obj.getObjectContent()));
    
    // this will store characters of first row in array    
    String row[] = line.split(","); 
                                       
    // this will fetch number of columns
    int length = row.length;
    
    while((line=reader.readLine()) != null) {
    
         // storing characters of corresponding line in an array
         String value[] = line.split(","); 
                                              
         for(int i=0;i<length;i++) {
             System.out.print(value[i]+"   ");
         }
         System.out.println();
    }
    

    【讨论】:

    • 你能edit你的答案解释什么以及为什么你的答案可以解决这个问题吗?
    • @Elikill58 只是这样做了,如果您有任何问题可以询问,我会很乐意解释
    • 这显然更好!我只是修复代码缩进:)
    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多