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.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipUtil {
	
	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 = null;
				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) {
			e.printStackTrace();
			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