如何在Amazon S3中读取文件的内容

ZZz*_*Zzz 6 java file-io amazon-s3 amazon-web-services

我有一个文件Amazon S3ABCD.我有3个对象("folderA/folderB/folderC/abcd.csv")是文件夹,在最后的文件夹中我有一个.csv文件(abcd.csv).我已经使用逻辑将其转换为并将其JSON加载回另一个文件,该.txt文件是同一文件夹中的文件("folderA/folderB/folderC/abcd.txt").我必须在本地下载文件才能做到这一点.我如何直接读取文件并将其写回文本文件.我用来写入S3中的文件的代码如下,我需要从S3读取文件.

 InputStream inputStream = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_16));
 ObjectMetadata metadata = new ObjectMetadata();
 metadata.setContentLength(json.length());
 PutObjectRequest request = new PutObjectRequest(bucketPut, filePut, inputStream, metadata);
 s3.putObject(request);
Run Code Online (Sandbox Code Playgroud)

ash*_*cse 7

首先,您应该让对象InputStream满足您的需求.

S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, key));
InputStream objectData = object.getObjectContent();
Run Code Online (Sandbox Code Playgroud)

传递InputStream,File Name并使用path以下方法下载您的流.

public void saveFile(String fileName, String path, InputStream objectData) throws Exception {
    DataOutputStream dos = null;
    OutputStream out = null;
    try {
        File newDirectory = new File(path);
        if (!newDirectory.exists()) {
            newDirectory.mkdirs();
        }

        File uploadedFile = new File(path, uploadFileName);
        out = new FileOutputStream(uploadedFile);
        byte[] fileAsBytes = new byte[inputStream.available()];
        inputStream.read(fileAsBytes);

        dos = new DataOutputStream(out);
        dos.write(fileAsBytes);
    } catch (IOException io) {
        io.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (out != null) {
                out.close();
            }
            if (dos != null) {
                dos.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

下载对象后,读取文件并将其JSON写入.txt文件,之后您可以将txt文件上传到所需的存储桶中S3

  • 我实际上用它来读取但无法直接将其更改为JSON并将其加载到s3中的.txt文件中.谢谢你的回答.这有帮助 (2认同)
  • `saveFile()`中的IO代码比必要的复杂得多.如[本答案](http://stackoverflow.com/a/34445210/56285)所示,基本上是`Files.copy(objectData,new File("/ my/path/file.jpg").toPath()) ;'足够了. (2认同)