压缩子目录仅压缩子目录的内容,而不压缩子目录

时间:2019-07-11 03:14:10

标签: java file zip

下面是我尝试的代码。它只压缩子文件夹的内容,而不压缩文件夹 我需要将所有子文件夹及其内容压缩。我在这里做错了。 示例:我在演示文件夹中有一个文件夹“ demo”,我有一个a,b,c文件夹。我想将a,b,c连同内容一起压缩,并且zip不应包含作为演示的父对象。

@if(!empty($jreq))
         <p>{{$jreq->user_id}} is requesting to join {{$jreq->name}} group</p>

1 个答案:

答案 0 :(得分:0)

这是我为带有层次结构和没有层次结构的zip文件和目录编写的代码。 zip.getHierarchy().equals("F")部分完成了您想做的工作。 在此代码中,您必须传递源文件,目标,层次结构(T / F)作为参数。 另外,您可能需要DTO类。

public static void Start() throws IOException{ 

    FileOutputStream fos = new FileOutputStream(zip.getDestination());
    ZipOutputStream zipOut = new ZipOutputStream(fos);
    File fileToZip = new File(zip.getSourcePath());

        zipDirectory(fileToZip, fileToZip.getName(), zipOut);

    zipOut.close();
    fos.close();
}

public static void zipDirectory(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {

    if (fileToZip.isDirectory()) {

        File[] children = fileToZip.listFiles();

        for (File childFile : children) {
            if(zip.getHierarchy().equals("T")) {
                zipDirectory(childFile, childFile.getPath(), zipOut);
            }else if(zip.getHierarchy().equals("F")){
                zipDirectory(childFile, childFile.getName(), zipOut);
            }
        }
        return; 
    }
    doZip(fileToZip,fileName,zipOut);
}

public static void doZip(File fileToZip,String fileName,ZipOutputStream zipOut) throws IOException {
    FileInputStream fis = new FileInputStream(fileToZip);
    ZipEntry zipEntry = new ZipEntry(fileName);
    zipOut.putNextEntry(zipEntry);
    byte[] bytes = new byte[1024];
    int length;
    while ((length = fis.read(bytes)) >= 0) {
        zipOut.write(bytes, 0, length);
    }
    fis.close();
}