2014-12-05 220 views
1

我想從中讀取數據,比如稱爲zip1,zip2,zip3,zip4的4個zip文件。所有這些zip文件都是從這個叫做「BigZip」的大文件中分離出來的。我想將zip文件合併成一個文件,然後比較1 bigzip文件與zip文件(zip1 + zip2 + zip3 + zip4)的大小是否匹配。當我合併4個zip文件的大小時,我得到的文件很小。我究竟做錯了什麼?從多個zip文件中讀取數據並將它們合併爲一個

這裏是我的同一代碼:

targetFilePath1,targetFilePath2,targetFilePath3,targetFilePath4屬於4個zip文件路徑。 sourceFilePath是通向BigZip文件

class Test { 


public static void main(String args[]) { 

ZipOutputStream outStream = new ZipOutputStream(new FileOutputStream(sourceBigZip)); 

      readZip(sourceFilePath, targetFilePath1); 
      readZip(sourceFilePath, targetFilePath2); 
      readZip(sourceFilePath, targetFilePath3); 
      readZip(sourceFilePath, targetFilePath4); 
    outStream.close(); 
} 

static void readZip(String sourceBigZip, String targetFile) throws Exception { 
    ZipInputStream inStream = new ZipInputStream(new FileInputStream(targetFile)); 
    byte[] buffer = new byte[1024]; 
    int len = inStream.read(buffer); 
    while (len != -1) { 
     outStream.write(buffer, 0, len); 
     len = inStream.read(buffer); 
     System.out.print(len); 
    } 

    inStream.close(); 
} 
} 

回答

-1

你打電話new ZipOutputStream每一次,它會創建一個新的空文件,並打掉你以前寫的一切。 您必須在readZip之外創建流,並將其傳遞給每個調用,而不是每次都創建一個新流。

+0

你的意思是像我編輯的代碼呢?請檢查我的編輯? – fscore 2014-12-05 18:26:31

+0

差不多......除了'readStream'在'readZip'中沒有定義。您必須將其作爲參數傳入,而不是'sourceBigZip',它現在未被使用。 另外,你的參數命名看起來相當混亂:源代碼應該是你閱讀的地方,目標是你寫的地方,不是嗎? – Dima 2014-12-05 18:31:21

+0

我試過這樣做,但沒有奏效。 – fscore 2014-12-05 19:05:55

1

創建ZipOutputStream一次,並把它傳遞給readZip()方法,如:

public static void main(String args[]) { 
    ZipOutputStream outStream = new ZipOutputStream(new FileOutputStream(sourceFilePath)); 
    readZip(outStream , targetFilePath1); 
    readZip(outStream , targetFilePath2); 
    readZip(outStream , targetFilePath3); 
    readZip(outStream , targetFilePath4); 
} 

然後,你必須處理來自一個拉鍊將數據複製到另一個... ,需要在每個文件複製的錯誤zip文件是這樣的:

static void readZip(ZipOutputStream outStream, String targetFile) 
     throws Exception { 
    ZipInputStream inStream = new ZipInputStream(new FileInputStream(
      targetFile)); 
    byte[] buffer = new byte[1024]; 
    int len = 0; 

    for (ZipEntry e; (e = inStream.getNextEntry()) != null;) { 
     outStream.putNextEntry(e); 
     while ((len = inStream.read(buffer)) > 0) { 
      outStream.write(buffer, 0, len); 
     } 
    } 
    inStream.close(); 
} 

}

相關問題