2014-12-05 6 views
5

의 파일이 Amazon S3에 있습니다. 나는 ("folderA/folderB/folderC/abcd.csv") 폴더 3 개체가 있고 .csv(abcd.csv) 파일이있는 최종 폴더에 있습니다. 논리를 사용하여 JSON으로 변환하고 다른 파일로 다시로드합니다. .txt 같은 폴더에있는 파일 ("folderA/folderB/folderC/abcd.txt")입니다. 나는 그것을하기 위해 파일을 로컬로 다운로드해야했다. 어떻게하면 파일을 직접 읽고 텍스트 파일에 다시 쓸 수 있습니까? S3에서 파일에 쓰는 데 사용한 코드는 아래에 나와 있으며 S3에서 파일을 읽어야합니다.Amazon 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); 
+0

S3에서 원하는 버킷에 txt 파일을 업로드 할 수있는 파일을 읽고 JSON로하고 그 후 .txt 파일에 쓰기 다운로드 후

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(); } } } 

당신은 S3에 대해 조금 혼란 보인다 objects :' "folderA/folderB/folderC/abcd.csv"와 같은 키를 가진 객체를 가질 수 있지만 그것은 단지 * one * 객체입니다. S3 개체는 항상 파일이 아니라 폴더가 아닙니다. (예를 들어, S3 웹 UI의'folderA' 등이 폴더와 같은 키로 객체를 생성 한 경우 폴더로 표시됩니다.) – Jonik

+0

이것은 [S3 객체를 파일에 쓰는 방법?] (http : //stackoverflow.com/questions/7679924/how-to-write-an-s3-object-to-a-file) – Jonik

답변

7

먼저 InputStream 개체를 가져와야합니다.

S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, key)); 
InputStream objectData = object.getObjectContent(); 

InputStream, File Name 및 아래의 방법에 path이 스트림을 다운로드 전달합니다. 당신이 당신의 목적은 당신이

+2

실제로 이것을 사용하여 이것을 읽었지만 이것을 JSON으로 직접 변경할 수는 없으며 이것을 .txt 파일로로드합니다. s3. 답변 해주셔서 감사합니다. 이 도움이 – ZZzzZZzz

+0

예. 그것은 조금 도움이되었습니다. 감사합니다. – ZZzzZZzz

+2

'saveFile()'의 IO 코드는 필요한 것보다 훨씬 복잡합니다. [This answer] (http://stackoverflow.com/a/34445210/56285)에서 볼 수 있듯이, 기본적으로'Files.copy (objectData, new File ("/ my/path/file.jpg"). toPath()) ; 충분하다. – Jonik

관련 문제