代码之家  ›  专栏  ›  技术社区  ›  bastianneu

用Java复制zip文件的最佳方法

  •  4
  • bastianneu  · 技术社区  · 15 年前

    经过研究:

    How to create a Zip File

    一些谷歌研究,我提出了这个Java函数:

     static void copyFile(File zipFile, File newFile) throws IOException {
        ZipFile zipSrc = new ZipFile(zipFile);
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(newFile));
    
        Enumeration srcEntries = zipSrc.entries();
        while (srcEntries.hasMoreElements()) {
                ZipEntry entry = (ZipEntry) srcEntries.nextElement();
                ZipEntry newEntry = new ZipEntry(entry.getName());
                zos.putNextEntry(newEntry);
    
                BufferedInputStream bis = new BufferedInputStream(zipSrc
                                .getInputStream(entry));
    
                while (bis.available() > 0) {
                        zos.write(bis.read());
                }
                zos.closeEntry();
    
                bis.close();
        }
        zos.finish();
        zos.close();
        zipSrc.close();
     }
    

    这段代码是有效的……但它一点也不干净……有人有好的想法或例子吗?

    编辑:

    如果zip存档得到了正确的结构,我希望能够添加某种类型的验证……因此,像普通文件一样复制它,而不考虑其内容,对我来说不起作用……或者您希望在以后检查它……我不确定这一点。

    3 回复  |  直到 15 年前
        1
  •  10
  •   Fortega    15 年前

    你只想复制完整的zip文件?不需要打开和读取zip文件…复制它就像复制其他文件一样。

    public final static int BUF_SIZE = 1024; //can be much bigger, see comment below
    
    
    public static void copyFile(File in, File out) throws Exception {
      FileInputStream fis  = new FileInputStream(in);
      FileOutputStream fos = new FileOutputStream(out);
      try {
        byte[] buf = new byte[BUF_SIZE];
        int i = 0;
        while ((i = fis.read(buf)) != -1) {
            fos.write(buf, 0, i);
        }
      } 
      catch (Exception e) {
        throw e;
      }
      finally {
        if (fis != null) fis.close();
        if (fos != null) fos.close();
      }
    }
    
        3
  •  0
  •   eeerahul Arrj    13 年前

    我的解决方案:

    import java.io.*;
    import javax.swing.*;
    public class MovingFile
    {
        public static void copyStreamToFile() throws IOException
        {
            FileOutputStream foutOutput = null;
            String oldDir =  "F:/UPLOADT.zip";
            System.out.println(oldDir);
            String newDir = "F:/NewFolder/UPLOADT.zip";  // name as the destination file name to be done
            File f = new File(oldDir);
            f.renameTo(new File(newDir));
        }
        public static void main(String[] args) throws IOException
        {
            copyStreamToFile();
        }
    }