2009-08-06 116 views
2

我需要(联合国)压缩一些文件和一些谷歌搜索后,我还没有发现任何工具做这件事。我知道我可以使用内置的java.uitl.zip。*类来完成它,但没有任何实用工具,这会使它更容易,最好是这样的:是否有任何Java压缩工具

SomeClass.unzip(“file_name.zip”, “目标目录”);

SomeClass.zip( “source_directory中”, “target_file_name.zip”,递归地);

我不想处理流。不仅仅是文件,或更好的只是文件名...

+0

http://www.1your.com/drupal/unziparchivedorcompressedfilesinJava – pjp 2009-08-06 09:11:55

+0

刚刚添加了一个基于文件名的例子 – VonC 2009-08-06 11:27:49

回答

4

怎么样在这个问题:“What’s a good compression library for Java?”中提到的Deflater/Inflater类。

我知道在Java提出目前的界面,基于流,而不是“文件名”为主,但根据对Java compression下面的文章,这是很容易建立一个围绕,一个实用工具类:

对于例如,基于文件名的解压缩函数看起来像:

import java.io.*; 
import java.util.zip.*; 

public class UnZip { 
    final int BUFFER = 2048; 
    public static void main (String argv[]) { 
     try { 
     BufferedOutputStream dest = null; 
     FileInputStream fis = new 
     FileInputStream(argv[0]); 
     ZipInputStream zis = new 
     ZipInputStream(new BufferedInputStream(fis)); 
     ZipEntry entry; 
     while((entry = zis.getNextEntry()) != null) { 
      System.out.println("Extracting: " +entry); 
      int count; 
      byte data[] = new byte[BUFFER]; 
      // write the files to the disk 
      FileOutputStream fos = new 
      FileOutputStream(entry.getName()); 
      dest = new 
       BufferedOutputStream(fos, BUFFER); 
      while ((count = zis.read(data, 0, BUFFER)) 
       != -1) { 
       dest.write(data, 0, count); 
      } 
      dest.flush(); 
      dest.close(); 
     } 
     zis.close(); 
     } catch(Exception e) { 
     e.printStackTrace(); 
     } 
    } 
} 
+0

我正在寻找更简单的东西。没有流,最大限度的文件,实际上文件名... – Juraj 2009-08-06 11:21:56

+0

因为我只需要提取一个zipe到临时目录(提取的文件将被其他逻辑处理后)我做了类似的东西。我只是想知道没有更简单的方法,因为我想几乎每个想提取zip的人都必须写类似的东西。 经过这么多年在Java世界我总是惊讶的是简单的事情可以做复杂的,复杂的:) 不管怎么说,THX的答案... – Juraj 2009-08-06 11:43:35

+0

,你必须是新到Java – Louis 2010-02-07 23:36:26

2

也许Compress from Apache Commons可以帮助你。

+0

我不喜欢在这里是我总是必须处理流。我觉得它非常简单易用。唯一要处理的是文件,实际上是文件名... – Juraj 2009-08-06 11:03:03

0

jar是一个伪装的unzipper。这可用吗?

+0

它也适用于流... – Juraj 2009-08-07 08:45:20