2016-09-13 30 views
0

テキストファイルを既存のzipファイルに挿入するにはどうすればよいですか。両方のファイルのストリームがあります。javaの既存のzipファイルにテキストファイルを追加するには?

サンプルコード以下の通りです:

私はIOutils.copy(in, out)を使用していますが、それはコンテンツを置き換えています。ファイルを挿入して既存のコンテンツを保持する必要があります。

public URI createACopyOfFile(String requestId) throws Exception { 
    BlobOutputStream blobOutputStream = null; 
    BlobInputStream blobInputStream = null; 
    try { 
     long startTime = System.currentTimeMillis(); 
     System.out.print("Start createACopyOfFile ->" + startTime); 
     long endTime = 0; 
     CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString); 
     CloudBlobClient cloudBlobClient = storageAccount.createCloudBlobClient(); 
     CloudBlobContainer container = cloudBlobClient.getContainerReference("tme-container"); 
     container.createIfNotExists(); 
     String blobName = "dummy.zip"; 
     CloudBlockBlob sourceBlob = container.getBlockBlobReference(blobName); 
     CloudBlockBlob targetBlob = container.getBlockBlobReference(requestId + "/dummy_copy.zip"); 
     targetBlob.startCopyFromBlob(sourceBlob); 

     blobOutputStream = targetBlob.openOutputStream(); 
     CloudBlockBlob blob = container.getBlockBlobReference(requestId + "/" + "activation.txt"); 
     blob.uploadText("Hello world"); 

     blobInputStream = blob.openInputStream(); 

     IOUtils.copy(blobInputStream, blobOutputStream); 

     endTime = System.currentTimeMillis(); 
     System.out.print("End createACopyOfFile -> " + endTime); 
     System.out.println("Total time taken for createACopyOfFile - > " + (endTime - startTime)/1000); 
     return targetBlob.getUri(); 
    } finally { 
     try { 
      if (blobInputStream != null) 
       blobInputStream.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     try { 
      if (blobOutputStream != null) 
       blobOutputStream.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

より具体的に質問を編集してください。これはJava固有の問題ですか?または、Azureに関連するものがありますか(そして、Azureにはいったら、どうですか?質問は不明です)。 –

+0

はい、それはJavaにのみ関連していますが、ファイルは空白のプラットフォームに格納されています。 大きなファイルを格納するためにBLOBストレージを使用しています。実行時には、そこにある大きなファイルにファイルを挿入する必要があります。 –

+0

サンプルコードが添付されています。 IOUtils.copy(blobInputStream、blobOutputStream)を実行したときに –

答えて

0

私はあなたに、azure SDKで行う方法はないことを伝えたいと思います。 zipファイルにファイルを追加すると、そのファイルは のコンテンツを再編成し、新しいzipファイルを生成します。 JAVAによってローカルで.zipファイルと追加ファイルをダウンロードできる方法が1つあります。その後、ファイルを空のストレージに再度アップロードすることができます。しかし、あなたのファイルは大きなファイルなので、実行可能な方法ではありません。

参照: Appending files to a zip file with Java

はそれがお役に立てば幸いです。どんな心配も、私に知らせてください。

関連する問題