2014-12-05 8 views
5

'daki bir dosyanın içeriğini nasıl okurum? Amazon S3 ürünündeki ABCD ürünündeki bir dosyam var. ("folderA/folderB/folderC/abcd.csv") 3 nesnem var, bunlar klasörleri ve son klasörde .csv dosya (abcd.csv) var. JSON'a dönüştürmek için bir mantık kullandım ve ("folderA/folderB/folderC/abcd.txt") aynı klasörde bir .txt dosya başka bir dosyaya geri yükleyin. Bunu yapmak için dosyayı yerel olarak indirmek zorunda kaldım. Dosyayı doğrudan nasıl okur ve tekrar metin dosyasına yazardım. S3'te bir dosyaya yazdığım kod aşağıda ve S3'ten bir dosya okumam gerekiyor.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 istenen kovaya txt dosyayı yükleyebilirsiniz dosyayı okumak ve JSON bunu yapmak ve bundan sonra .txt dosyasına yazmak indirin sonra

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

Sen S3 hakkında biraz karışık görünüyor nesneler: '' folderA/folderB/folderC/abcd.csv '' gibi bir tuşa sahip bir nesneye sahip olabilirsiniz, ancak bu yalnızca bir * nesnedir. S3 nesneleri her zaman dosyalardır, klasörler değildir. (Örneğin, S3 web kullanıcı arabiriminde 'FolderA' vb. Bu tür anahtarlarla nesne oluşturduysanız, klasörler olarak görünür.) – Jonik

+0

Bu, bir dosyanın [S3 nesnesini nasıl yazılır?] (Http: //stackoverflow.com/questions/7679924/how-to-write-an-s3-object-to-a-file) – Jonik

cevap

7

İlk önce gereksiniminizi yapmak için InputStream nesnesini almalısınız.

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

InputStream, File Name ve aşağıdaki yönteme path Akışınızı indirmek için iletin. Eğer nesne

+2

Bunu okumak için kullandım, ancak bunu doğrudan JSON olarak değiştiremedim ve bunu .txt dosyasına yükleyemedim s3 içinde. Cevap için teşekkürler. Bu, – ZZzzZZzz

+0

Evet yardımcı olur. Biraz yardımcı oldu. Teşekkürler – ZZzzZZzz

+2

'saveFile()' deki IO kodu, gerekenden daha karmaşıktır. [Bu yanıt] 'da gösterildiği gibi (http://stackoverflow.com/a/34445210/56285) temel olarak Files.copy (objectData, yeni Dosya ("/ my/path/file.jpg"). ToPath()) ; 'yeterlidir. – Jonik