如何用java读写zip文件?

如何用java读写zip文件?,java,Java,我正在练习如何理解java中的zip文件的读写。我读过关于读取文件并将其转换为zip文件的文章,我也尝试过。我读过关于使用java读取zip文件的内容。如何将这些读写操作组合在一起。比如,我想在硬盘中读取压缩文件,然后将其保存到另一个位置 我可以读取带有以下代码的zip文件: FileInputStream fs = new FileInputStream("C:/Documents and Settings/tamilvendhank/Desktop/abc.zip"); ZipInputSt

我正在练习如何理解java中的zip文件的读写。我读过关于读取文件并将其转换为zip文件的文章,我也尝试过。我读过关于使用java读取zip文件的内容。如何将这些读写操作组合在一起。比如,我想在硬盘中读取压缩文件,然后将其保存到另一个位置

我可以读取带有以下代码的zip文件:

FileInputStream fs = new FileInputStream("C:/Documents and Settings/tamilvendhank/Desktop/abc.zip");
ZipInputStream zis = new ZipInputStream(fs);
ZipEntry zE;
while((zE=zis.getNextEntry())!=null){
    System.out.println(ze.getName());
    zis.closeEntry();
  }

zis.close();
String fn = "C:/Documents and Settings/tamilvendhank/Desktop/New Text Document.txt";
byte[] b = new byte[1024];
FileInputStream fis = new FileInputStream(fn);
fis.read(b, 0, b.length);
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("C:/Documents and Settings/tamilvendhank/Desktop/123.zip"));
ZipEntry ze = new ZipEntry(fn);
ze.setSize((long)b.length);
zos.setLevel(6);
zos.putNextEntry(ze);
zos.write(b, 0, b.length);
zos.finish();
zos.close();
而且,我还可以用以下代码制作一个要压缩的文本文件:

FileInputStream fs = new FileInputStream("C:/Documents and Settings/tamilvendhank/Desktop/abc.zip");
ZipInputStream zis = new ZipInputStream(fs);
ZipEntry zE;
while((zE=zis.getNextEntry())!=null){
    System.out.println(ze.getName());
    zis.closeEntry();
  }

zis.close();
String fn = "C:/Documents and Settings/tamilvendhank/Desktop/New Text Document.txt";
byte[] b = new byte[1024];
FileInputStream fis = new FileInputStream(fn);
fis.read(b, 0, b.length);
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("C:/Documents and Settings/tamilvendhank/Desktop/123.zip"));
ZipEntry ze = new ZipEntry(fn);
ze.setSize((long)b.length);
zos.setLevel(6);
zos.putNextEntry(ze);
zos.write(b, 0, b.length);
zos.finish();
zos.close();
现在我将如何连接上述两个代码,并使代码读取zip文件并将其写入不同的位置


任何建议

为什么不将其作为FileInputStream打开,并将内容转储到FileOutputStream中呢。这就是执行简单复制操作的方式,您不必先解压缩文件,然后再将其压缩回硬盘上的另一个位置。

您的问题似乎更多的是如何连接输入流和输出流,从一个流读取,从另一个流写入

答案是使用while循环,从输入读取块并将其写入输出。像这样的东西

byte[] data = new byte[2048];
int b = -1;
while ((b = is.read(data)) != -1)
{
   fos.write(data, 0, b);
}

is.close();
fos.close();

有没有什么特别的原因让你先解压然后再重新解压?看起来只是按原样复制文件可能更容易。签出.OMG!!当我用
FileInputStream fs=newfileinputstream(“C:/Documents and Settings/tamilvendhank/Desktop/abc.zip”)读取zip文件时;ZipInputStream zis=新的ZipInputStream(fs),实际上我正在解压!!!!????我说的对吗@乔里,CS:这取决于你所说的“解压”是什么意思。文件系统上的原始文件将保持不变,以防万一就是这个意思。但是,是的,您正在读取压缩文件的内容,因此从这个意义上讲,您的代码是在内存中“解压”的。不要忘记try{}finally{}块以确保关闭流。;)还要注意的是,由于java7,您可以只使用Files.copy