Java创建zip压缩文件(不依赖第三方库)
话不多说,直接上代码:
import org.junit.Test; import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class File2Zip { @Test public void test() { String rootPath = "C:\Users\Admin\AndroidStudioProjects\MyApplication\app\src\main\"; File zipFile = new File(rootPath + "../测试压缩" + ".zip"); try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFile))){ zipFile(new File(rootPath), null, "", zipOutputStream); } catch (Exception e) { e.printStackTrace(); } } public static void zipFile(File file, FilenameFilter filenameFilter, String basePath, ZipOutputStream zipOutputStream) throws IOException { if(basePath.length()>0 && !basePath.endsWith("\") && !basePath.endsWith("/")) { basePath += File.separator; } if (file.isDirectory()) { basePath += file.getName() + File.separator; if (basePath.length()>0) { zipOutputStream.putNextEntry(new ZipEntry(basePath)); } File[] arr = file.listFiles(filenameFilter); if (arr!=null) { for (File f : arr) { zipFile(f, filenameFilter, basePath, zipOutputStream); } } } else { try (FileInputStream fin = new FileInputStream(file)) { zipOutputStream.putNextEntry(new ZipEntry(basePath + file.getName())); byte[] data = new byte[4096]; int len; while ((len = fin.read(data)) != -1) { zipOutputStream.write(data, 0, len); } } catch (Exception e) { e.printStackTrace(); } } } }
递归调用,参考了代码
如何指定是否包含顶级目录?
zipFile(new File(rootPath), null, "", zipOutputStream); // 不包含顶级目录 zipFile(new File(rootPath), null, "main", zipOutputStream); // 包含顶级目录
如何只压缩指定部分的目录?
比如只压缩 C:\Users\Admin\AndroidStudioProjects\MyApplication\app\src\main\文件夹下的 Java、reslayout 内容:
String rootPath = "C:\Users\TEST\AndroidStudioProjects\MyApplication\app\src\main\"; File zipFile = new File(rootPath + "代码和布局文件" + ".zip"); try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFile))){ //zipOutputStream.putNextEntry(new ZipEntry("main\")); zipFile(new File(rootPath+"java"), null, "main", zipOutputStream); zipFile(new File(rootPath+"res\layout"), null, "main\res", zipOutputStream); } catch (Exception e) { e.printStackTrace(); }
压缩单个文件
zipFile(new File(rootPath+"res\layout\test.xml"), null, "res\layout", zout);