package com.utils;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.Adler32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.zte.ums.ems.rrucheck.output.OutputFilesFilter;
public class ZipUtil {
private Logger logger;
public ZipUtil() {
logger=LoggerFactory.getLogger(ZipUtil.class);
}
public ZipUtil(Logger logger) {
this.logger=logger;
}
public String zipAndDelSourceFiles_OMMB(String dir){
String sourceNameRegex="(filename1|filename2)\\.csv";
String targetFileName="zipname.zip";
String zipFilePath = null;
try {
if (zip(dir,sourceNameRegex,targetFileName)) {
zipFilePath=new File(dir,targetFileName).getCanonicalPath();
FilePathUtil.del(dir, sourceNameRegex);
zipFilePath=new File(dir,targetFileName).getCanonicalPath();
}
} catch (IOException e) {
logger.error(e.getMessage());
}
return zipFilePath;
}
public boolean zip(String sourceFilePath,String sourceNameRegex,String targetFileName) throws IOException{
File target=new File(sourceFilePath,targetFileName);
File dir=target.getParentFile();
File[] sourceFiles=dir.listFiles(new OutputFilesFilter(sourceNameRegex));
return zip(sourceFiles,target);
}
public boolean zip(File[] sorceFiles,File targetZipFile){
boolean result = false;
try {
FileOutputStream target = new FileOutputStream(targetZipFile);
CheckedOutputStream cos = new CheckedOutputStream(target,
new Adler32());
ZipOutputStream zos = new ZipOutputStream(cos);
BufferedOutputStream out = new BufferedOutputStream(zos);
DataInputStream in = null;
try {
for (File sorceFile : sorceFiles) {
zos.putNextEntry(new ZipEntry(sorceFile.getName()));
int count;
in = new DataInputStream(new BufferedInputStream(
new FileInputStream(sorceFile)));
while ((count = in.read()) != -1) {
out.write(count);
}
out.flush();
in.close();
}
} catch (IOException e) {
logger.error(e.getMessage());
} finally {
try {
out.close();
} catch (IOException e) {
logger.error(e.getMessage());
}
}
result = true;
} catch (FileNotFoundException e) {
logger.error(e.getMessage());
}
return result;
}
}