2014-12-05 162 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(); 
} 

}

相关问题