解决方案 »

  1.   

    附上我的测试代码(ant下的)
    package zTest;import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.util.Enumeration;import org.apache.tools.ant.Project;
    import org.apache.tools.ant.taskdefs.Expand;
    import org.apache.tools.ant.taskdefs.Zip;
    import org.apache.tools.ant.types.FileSet;
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipFile;public class ZipUtil { private static final Project DEFAULT_PROJECT = new Project(); public static void zip(File orgin, File dest) {
    Zip zip = new Zip();
    zip.setProject(DEFAULT_PROJECT);
    zip.setDestFile(dest); FileSet fs = new FileSet();
    fs.setProject(DEFAULT_PROJECT);
    fs.setDir(orgin);
    zip.addFileset(fs);
    zip.execute(); } public static boolean unZip(String zipFileName, String outputDirectory) {
    boolean flag = false;
    try {
    ZipFile zipFile = new ZipFile(zipFileName);
    Enumeration e = zipFile.getEntries();
    ZipEntry zipEntry = null;
    createDirectory(outputDirectory, "");
    while (e.hasMoreElements()) {
    zipEntry = (ZipEntry) e.nextElement();
    if (zipEntry.isDirectory()) {
    String name = zipEntry.getName();
    name = name.substring(0, name.length() - 1);
    File f = new File(outputDirectory + File.separator + name);
    f.mkdir();
    } else {
    String fileName = zipEntry.getName();
    fileName = fileName.replace('\\', '/');
    if (fileName.indexOf("/") != -1) {
    createDirectory(outputDirectory, fileName.substring(0,
    fileName.lastIndexOf("/")));
    fileName = fileName.substring(
    fileName.lastIndexOf("/") + 1,
    fileName.length());
    }
    File f = new File(outputDirectory + File.separator
    + zipEntry.getName());
    f.createNewFile();
    InputStream in = zipFile.getInputStream(zipEntry);
    FileOutputStream out = new FileOutputStream(f);
    byte[] by = new byte[1024];
    int c;
    while ((c = in.read(by)) != -1) {
    out.write(by, 0, c);
    }
    out.close();
    in.close();
    }
    flag = true;
    }
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    return flag;
    } private static void createDirectory(String directory, String subDirectory) {
    String dir[];
    File fl = new File(directory);
    try {
    if (subDirectory == "" && fl.exists() != true)
    fl.mkdir();
    else if (subDirectory != "") {
    dir = subDirectory.replace('\\', '/').split("/");
    for (int i = 0; i < dir.length; i++) {
    File subFile = new File(directory + File.separator + dir[i]);
    if (subFile.exists() == false)
    subFile.mkdir();
    directory += File.separator + dir[i];
    }
    }
    } catch (Exception ex) {
    System.out.println(ex.getMessage());
    }
    } public static void main(String[] args) {
    unZip("E:\\好的\\测试报告.zip", "E:\\好的\\");
    }
    }
      

  2.   

    这个用gbk解码,在读取后把流变成utf-8的String,然后在变成utf-8字节写入utf-8文件,不行吗?
      

  3.   

    你换成 appche 里面的 ZIP 类 问题完美解决