编写工具类
public class ZipUtils {
private final Logger logger = Logger.getLogger(ZipUtils.class);
/**
* 用来保存遍历的文件
*/
public static List<String> fileList = new ArrayList<String>();
public static boolean fileToZip(String sourceFilePath,String zipFilePath, String fileName) {
boolean flag = false;
FileInputStream fis = null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
ZipOutputStream zos = null;
getFile(sourceFilePath);
try {
File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
if (zipFile.exists()) {
System.out.println( fileName + ".zip" + "的打包文件已存在");
zipFile.delete();
System.out.println( "删除"+fileName + ".zip" );
}
if(!zipFile.exists()){
zipFile.getParentFile().mkdirs();
}
fos = new FileOutputStream(zipFile);
zos = new ZipOutputStream(new BufferedOutputStream(fos));
byte[] bufs = new byte[1024 * 1024];
for (int i = 0; i < fileList.size(); i++) {
try {
// 读取待压缩的文件并写进压缩包里
fis = new FileInputStream(fileList.get(i));
bis = new BufferedInputStream(fis, 1024 * 1024);
int read = 0;
while ((read = bis.read(bufs, 0, 1024 * 1024)) != -1) {
zos.write(bufs, 0, read);
}
//删除源文件
fis.close();
File file = new File(fileList.get(i));
file.delete();
} catch (Exception e) {
logger.info("文件读取处理有误");
e.printStackTrace();
}
}
flag = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// 关闭流
try {
if (null != bis)
bis.close();
if (null != zos)
zos.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
return flag;
}
public static void getFile(String sourceFilePath) {
File file = new File(sourceFilePath);
File[] tempList = file.listFiles();
for (File f : tempList) {
if (f.isFile()) {
fileList.add(f.getPath());
System.out.println(f.getPath());
continue;
}
if (f.isDirectory()) {
getFile(f.getPath());
}
}
}
}