当前位置: 首页 > 面试题库 >

通过Java复制Zip文件的最佳方法

赏夕
2023-03-14
问题内容

经过研究:

如何创建一个Zip文件

和一些谷歌研究,我想出了这个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归档文件的结构正确,我希望能够添加某种类型的验证…因此像普通文件一样复制它而不考虑其内容对我来说不起作用…或者您希望以后再检查它…我不确定这个


问题答案:

您只想复制完整的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();
  }
}


 类似资料:
  • 我在Java8中创建了一个ZIP文件,并尝试将包含所有子文件和目录的目录复制到这个zip文件中。 每当我添加行文件时。复制要将我的目录以及所有子目录和子文件复制到zip文件中,我遇到了以下异常:

  • 问题内容: 我想用 gulp.js 观看目录中的所有内容,但.min.ext文件 除外 。过滤掉这些的最佳方法是什么? 例: 编辑: 如果没有外部软件包就无法完成,哪一个是最有名的? 问题答案: 内部使用(请参阅源代码),内部使用,自身使用,因此您应该能够使用忽略某些文件。 实际上,甚至在vinyl-fs的自述文件中对此进行了描述:

  • 问题内容: 这是我第一次必须订购Java。我需要通过键执行此操作,但是在我的情况下,键是一个对象,因此需要按特定字段进行排序。我自己尝试解决这个问题,我考虑过继续进行以下简单的代码编写: 假设它有效并且我不关心性能,那么在真正使用它之前,我想知道下一小段代码是否会更好,最重要:为什么? 下面的示例来自此处:如何在Java中按键和值对HashMap进行排序 如果两者都不对,该怎么办? 问题答案: 如

  • 问题内容: 我必须使用Java读取旧格式的二进制文件。 简而言之,该文件的标头由几个整数,字节和固定长度的char数组组成,后跟同样由整数和char组成的记录列表。 我可以用任何其他语言创建s(C / C ++)或s(Pascal / Delphi),它们是标题和记录的逐字节表示。然后,我将字节读入标头变量,并对记录执行相同的操作。 像这样:(Delphi) 用Java做类似的事情的最佳方法是什么

  • 有没有办法让通过注释加载工厂中仍然是的

  • 我有一个方法,解压缩压缩文件通过Java。 这种方法效果很好。 但最近我试图用这个方法解压某个文件(final output.zip),但遇到了一个运行时异常。 下面是该方法的代码: 重要的是要注意,我能够成功地使用WinRar解压缩此文件。 在上面的代码中,我获取异常的那一行用注释标记。 我得到的异常的堆栈跟踪如下: 此外,异常中提到的文件,实际上在zip文件中。请帮忙。