复制文件夹,并压缩成zip
需求:创建A文件夹,把B文件夹复制到A文件夹。然后把A文件夹压缩成zip包
public static void main(String[] args) throws Exception {try {String A = "D:\\dev\\program";String B = "D:\\program";// 创建临时文件夹File tempDir = new File(A);tempDir.mkdir();// 把B文件夹复制到A文件夹File sourceDir = new File(B);File destinationDir = new File(tempDir, "");copyDirectory(sourceDir, destinationDir);//把A文件夹压缩成zip包String AZIP = A + ".zip";zipFolder(A, AZIP);// 删除临时文件夹FileUtils.deleteDirectory(tempDir);} catch (Exception e) {e.printStackTrace();}}/*** 复制文件夹** @param source 复制后文件夹路径* @param destination 原文件夹路径* @throws IOException*/private static void copyDirectory(File source, File destination) throws IOException {File[] files = source.listFiles();for (File file : files) {if (file.isDirectory()) {copyDirectory(file, new File(destination, file.getName()));} else {if (!destination.exists()) {destination.mkdirs();}File copy = new File(destination, file.getName());copy.createNewFile();FileInputStream in = new FileInputStream(file);FileOutputStream out = new FileOutputStream(copy);byte[] buffer = new byte[1024];int length;while ((length = in.read(buffer)) > 0) {out.write(buffer, 0, length);}in.close();out.close();}}}/*** 压缩文件** @param path 需要压缩的文件路径* @param zipPath 压缩的文件后路径* @throws Exception*/public static void zipFolder(String path, String zipPath) throws Exception {FileOutputStream fos = null;ZipOutputStream zos = null;try {fos = new FileOutputStream(zipPath);zos = new ZipOutputStream(fos);addFolderToZip("", new File(path), zos);} finally {if (zos != null) {zos.close();}if (fos != null) {fos.close();}}}/*** 秭归添加压缩路径*/private static void addFolderToZip(String parentPath, File folder, ZipOutputStream zos) throws Exception {for (File file : folder.listFiles()) {if (file.isDirectory()) {addFolderToZip(parentPath + folder.getName() + "/", file, zos);} else {FileInputStream fis = null;try {fis = new FileInputStream(file);ZipEntry zipEntry = new ZipEntry(parentPath + folder.getName() + "/" + file.getName());zos.putNextEntry(zipEntry);byte[] bytes = new byte[1024];int length;while ((length = fis.read(bytes)) >= 0) {zos.write(bytes, 0, length);}} finally {if (fis != null) {fis.close();}}}}}
没了。谢谢