import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipUtil {
private static Logger logger = LoggerFactory.getLogger(ZipUtil.class);
public static void createZip(String zipfullPath, String[] fileFullPaths, String[] fileNames) {
InputStream inputStream = null;
ZipOutputStream zip = null;
try {
File file = new File(zipfullPath);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
zip = new ZipOutputStream(new FileOutputStream(zipfullPath));
for (int i = 0; i < fileFullPaths.length; i++) {
String fullPath = fileFullPaths[i];
if (null == fullPath || ("").equals(fullPath)) {
continue;
}
file = new File(fullPath);
String fileName = fileNames[i];
inputStream = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
inputStream.close();
zip.putNextEntry(new ZipEntry(fileName));
zip.write(buffer);
zip.closeEntry();
logger.info("-------> {}文件压缩成功 <-------", fileName);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeAll(inputStream, null, zip);
}
}
public static void writeToZipStream(final ZipOutputStream zipOutput, InputStream inputStream, String fileName)
throws IOException {
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(inputStream);
ZipEntry entry = new ZipEntry(fileName);
zipOutput.putNextEntry(entry);
int read = 0;
byte[] buffer = new byte[4096];
while ((read = bis.read(buffer)) != -1) {
zipOutput.write(buffer, 0, read);
zipOutput.flush();
}
zipOutput.closeEntry();
} finally {
if (inputStream != null) {
inputStream.close();
}
if (bis != null) {
bis.close();
}
}
}
public static void downLoadFile(String zipfullPath, HttpServletResponse response) {
InputStream inputStream = null;
OutputStream outputStream = null;
try {
File file = new File(zipfullPath);
String fileName = file.getName();
inputStream = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/octet-stream; charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes(), "ISO8859-1"));
response.setHeader("Content-Length", "" + file.length());
outputStream = new BufferedOutputStream(response.getOutputStream());
outputStream.write(buffer);
outputStream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
closeAll(inputStream, outputStream, null);
}
}
private static void closeAll(InputStream inputStream, OutputStream outputStream, ZipOutputStream zipOutputStream) {
try {
if (outputStream != null) {
outputStream.close();
}
if (inputStream != null) {
inputStream.close();
}
if (zipOutputStream != null) {
zipOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}