All Downloads are FREE. Search and download functionalities are using the official Maven repository.

me.shib.java.lib.common.utils.ZipUtil Maven / Gradle / Ivy

package me.shib.java.lib.common.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public final class ZipUtil {

    private static Logger logger = Logger.getLogger(ZipUtil.class.getName());

    public File zipContent(File sourceContent) {
        return zipContent(sourceContent, true);
    }

    public File zipContent(File sourceContent, boolean includeSourceDir) {
        return zipContent(sourceContent, null, includeSourceDir);
    }

    public File zipContent(File sourceContent, File zipFile) {
        return zipContent(sourceContent, zipFile, true);
    }

    public File zipContent(File sourceContent, File zipFile, boolean includeSourceDir) {
        if (!sourceContent.exists()) {
            return null;
        }
        if (zipFile == null) {
            zipFile = new File(sourceContent.getName() + ".zip");
        }
        List fileList = new ArrayList<>();
        generateFileList(fileList, sourceContent, sourceContent, includeSourceDir);
        byte[] buffer = new byte[1024];
        try {
            FileOutputStream fos = new FileOutputStream(zipFile);
            ZipOutputStream zos = new ZipOutputStream(fos);
            for (String file : fileList) {
                ZipEntry ze = new ZipEntry(file);
                zos.putNextEntry(ze);
                FileInputStream in;
                if (sourceContent.isDirectory()) {
                    if (includeSourceDir) {
                        in = new FileInputStream(sourceContent.getAbsoluteFile().getParentFile().getAbsolutePath() + File.separator + file);
                    } else {
                        in = new FileInputStream(sourceContent.getAbsolutePath() + File.separator + file);
                    }
                } else {
                    in = new FileInputStream(sourceContent);
                }
                int len;
                while ((len = in.read(buffer)) > 0) {
                    zos.write(buffer, 0, len);
                }
                in.close();
            }
            zos.closeEntry();
            zos.close();
            return zipFile;
        } catch (IOException e) {
            logger.throwing(this.getClass().getName(), "zipContent", e);
            return null;
        }
    }

    private void generateFileList(List fileList, File sourceContent, File node, boolean includeSourceDir) {
        if (node.isFile()) {
            if (sourceContent.isDirectory()) {
                fileList.add(generateZipEntry(sourceContent, node, includeSourceDir));
            } else {
                fileList.add(generateZipEntry(null, node, includeSourceDir));
            }
        }
        if (node.isDirectory()) {
            String[] subNote = node.list();
            for (String filename : subNote) {
                generateFileList(fileList, sourceContent, new File(node, filename), includeSourceDir);
            }
        }
    }

    private String generateZipEntry(File sourceContent, File file, boolean includeSourceDir) {
        if (sourceContent != null) {
            if (includeSourceDir) {
                return file.getAbsolutePath().substring(sourceContent.getAbsoluteFile().getParentFile().getAbsolutePath().length() + 1, file.getAbsolutePath().length());
            } else {
                return file.getAbsolutePath().substring(sourceContent.getAbsolutePath().length() + 1, file.getAbsolutePath().length());
            }
        }
        return file.getName();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy