public class FileUtils{/*** 压缩文件** @param sourceFilePath 源文件路径* @param zipFilePath 压缩后文件存储路径* @param zipFilename 压缩文件名*/public static void compressToZip(String sourceFilePath, String zipFilePath, String zipFilename) {File sourceFile = new File(sourceFilePath);File zipPath = new File(zipFilePath);if (!zipPath.exists()) {zipPath.mkdirs();}File zipFile = new File(zipPath + File.separator + zipFilename);try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {writeZip(sourceFile, "", zos);//文件压缩完成后,删除被压缩文件boolean flag = deleteDir(sourceFile);log.info("删除被压缩文件[" + sourceFile + "]标志:{}", flag);} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getMessage(), e.getCause());}}/*** 遍历所有文件,压缩** @param file 源文件目录* @param parentPath 压缩文件目录* @param zos 文件流*/public static void writeZip(File file, String parentPath, ZipOutputStream zos) {if (file.isDirectory()) {//目录parentPath += file.getName() + File.separator;File[] files = file.listFiles();for (File f : files) {writeZip(f, parentPath, zos);}} else {//文件try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {//指定zip文件夹//ZipEntry zipEntry = new ZipEntry(parentPath + file.getName());//生成的zip不包含该文件夹ZipEntry zipEntry = new ZipEntry(file.getName());zos.putNextEntry(zipEntry);int len;byte[] buffer = new byte[1024 * 10];while ((len = bis.read(buffer, 0, buffer.length)) != -1) {zos.write(buffer, 0, len);zos.flush();}} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getMessage(), e.getCause());}}/*** 删除文件夹** @param dir* @return*/public static boolean deleteDir(File dir) {if (dir.isDirectory()) {String[] children = dir.list();for (int i = 0; i < children.length; i++) {boolean success = deleteDir(new File(dir, children[i]));if (!success) {return false;}}}//删除空文件夹return dir.delete();}
}