热门关键字:  ubuntu  分区  linux系统进程  函数  Fedora

当前位置 :| 主页>Linux教程>编程开发>JAVA>

用java写压缩文件夹

来源: 作者: 时间:2007-09-02 Tag: 点击:
 

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 的压缩工具包。
最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
栏目列表