Java zip util添加额外的文件夹

时间:2013-06-12 00:18:45

标签: java zip

我遇到了拉链文件夹的问题。

即。我会有一个这样的文件夹

C:\Lazy\Test

包含文件File1.cpp,File2.hpp,.. etc

压缩文件夹看起来像C:\ Lazy \ Test.zip - > Lazy \ Test包含所有cpp和hpp文件。

我想删除创建的额外子文件夹(Lazy \ Test)。为什么会这样?

换句话说,压缩文件不是直接在zip文件下面,我必须导航另外两个文件夹才能找到它们。

我在哪里可以在代码中找到此问题?

    private void zipDirectory() {

       File lazyDirectory = new File(defaultSaveLocation);

       File[] files = lazyDirectory.listFiles();

       for (File file : files) {

          if (file.isDirectory()) {
            System.out.println("Zipping up " + file);
            zipContents(file);
            }
        }       
    }


public static void addToZip(String fileName, ZipOutputStream zos) throws FileNotFoundException, IOException {

    System.out.println("Writing '" + fileName + "' to zip file");

    File file = new File(fileName);
    FileInputStream fis = new FileInputStream(file);
    ZipEntry zipEntry = new ZipEntry(fileName);
    zos.putNextEntry(zipEntry);

    byte[] bytes = new byte[1024];
    int length;
    while ((length = fis.read(bytes)) >= 0) {
        zos.write(bytes, 0, length);
    }

    zos.closeEntry();
    fis.close();

    }

public static void zipContents(File dirToZip) {

    List<File> fileList = new ArrayList<File>();

    File[] filesToZip = dirToZip.listFiles();

    for (File zipThis : filesToZip) {

        String ext = "";

        int i = zipThis.toString().lastIndexOf('.');

        if (i > 0) {
            ext = zipThis.toString().substring(i+1);
        }

        if(ext.matches("cpp|bem|gz|h|hpp|pl|pln|ppcout|vec|xml|csv")){
            fileList.add(zipThis);
        }

    }


    try {
        FileOutputStream fos = new FileOutputStream(dirToZip.getName() + ".zip");
        ZipOutputStream zos = new ZipOutputStream(fos);

        for (File file : fileList) {

            addToZip(file.toString(), zos);

        }

      } catch (FileNotFoundException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:1)

addToZip文件更改为File个对象。使用它打开文件流,但只使用File#getName创建ZipEntry,如下所示......

public static void addToZip(File file, ZipOutputStream zos) throws FileNotFoundException, IOException {

    System.out.println("Writing '" + fileName + "' to zip file");

    FileInputStream fis = new FileInputStream(file);
    ZipEntry zipEntry = new ZipEntry(file.getName());
    zos.putNextEntry(zipEntry);

    byte[] bytes = new byte[1024];
    int length;
    while ((length = fis.read(bytes)) >= 0) {
        zos.write(bytes, 0, length);
    }

    zos.closeEntry();
    fis.close();

}