日期:2014-05-20  浏览次数:20853 次

用java写压缩文件夹
我现在想用java写一个压缩的应用!!!
将一文件夹下的所有文件夹(所有文件夹下都有很多文件)进行压缩。
请问各位用java怎样实现的呢?

我百度了一下,但很多都是关于将文件压缩的,而不是将文件夹下所有的文件压缩的!

急呀!先谢谢了!

------解决方案--------------------
压缩文件与压缩文件夹在本质上是一样的。压缩文件夹的关键在于递归的调用。保证输出流是一直打开的。输入流中若为文件则写到输出流中,若为文件夹则遍历文件夹中的各个文件名,若为文件则写到输出流中,若为文件夹则继续递归调用。
------解决方案--------------------
写什么啊...直接用rar不久行了...

最新的rar3.7Final dos下的才324k

你用加密压缩,然后改下后缀名不就成你自己的了?
------解决方案--------------------
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Test {

  static final int BUFFER = 2048;

  public static void main(String[] args) throws IOException {
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream( "f:/yx.zip "));
    ZipOutputStream out = new ZipOutputStream(bos);
    // f:/yx 是一个目录,下面有一些文件和目录
    File f = new File( "f:/yx ");
    put(f, out, " ");
    out.close();
    System.out.println( "OK ");
  }

  public static void put(File f, ZipOutputStream out, String dir) throws IOException {
    if (f.isDirectory()) {
      File[] files = f.listFiles();
      dir = dir + (dir.length() == 0 ? " " : "/ ") + f.getName();
      for (File file : files) {
        put(file, out, dir);
      }
    } else {
      byte[] data = new byte[BUFFER];
      FileInputStream fi = new FileInputStream(f);
      BufferedInputStream origin = new BufferedInputStream(fi, BUFFER);
      dir = dir.length() == 0 ? " " : dir + "/ " + f.getName();
      ZipEntry entry = new ZipEntry(dir);
      out.putNextEntry(entry);
      int count;
      while ((count = origin.read(data, 0, BUFFER)) != -1) {
        out.write(data, 0, count);
      }
      origin.close();
    }
  }
}

API 问题,不能存在中文目录和文件名,否则会现目录/文件名乱码。
------解决方案--------------------
到网上找了找,把下面的两行

import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

替换成:

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

其他的不变,就可以支持中文了,类库在 ant.jar 中,做 Java 的应该每台机器都有,里面还有 tar 的压缩工具包。