2016-09-13 94 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相关,但文件存储在azure平台上。 我使用blob存储来存储一个大文件,并且在运行时我必须将一个文件插入一个大文件,这个文件在azure上。 –

+0

我已附上示例代码。当我做了IOUtils.copy(blobInputStream,blobOutputStream)时,请检查 –

回答

0

我想告诉你,azure SDK没有办法做到这一点。当您将文件添加到zip文件时,该文件将 重新组织其内容并生成一个新的zip文件。 有一种方法可以下载.zip文件并通过JAVA在本地添加文件。之后,您可以再次将文件上传到Azure存储。但是你的文件是一个大文件,所以这不是一个可行的方法。

的参考文献: Appending files to a zip file with Java

希望它帮助。任何疑虑,请随时让我知道。

相关问题