IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> java压缩文件(夹) -> 正文阅读

[移动开发]java压缩文件(夹)

包含压缩文件或文件夹、压缩多个文件或文件夹、按数量分段压缩文件夹
使用带缓冲的输入流提高压缩速度

package com.client.util;

 
import java.io.*;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
 
/**
 * 说明:java压缩成zip
 */
public class FileZip {
 
	private static void zip(ZipOutputStream out, File f, String base) throws Exception {
		if (f.isDirectory()) {
			File[] fl = f.listFiles();
			out.putNextEntry(new ZipEntry(base + "/"));
			base = base.length() == 0 ? "" : base + "/";
			for (int i = 0; i < fl.length; i++) {
				zip(out, fl[i], base + fl[i].getName());
			}
		} else {
			out.putNextEntry(new ZipEntry(base));
			BufferedInputStream in=new BufferedInputStream(new FileInputStream(f));
			byte[] b=new byte[1024];
			int len=0;
			while ((len=in.read(b)) != -1) {
				out.write(b,0,len);
			}
			in.close();
		}
	}
	/**压缩一个文件夹到压缩包,生成的压缩包在该文件夹下
	 * @param zipName 压缩文件名,包含后缀,不包含路径*/
	public static void zipDir(String dirPath,String zipName){
		File file=new File(dirPath);
		if(file.isDirectory()){
			File[] files = file.listFiles();
		    FileUtil.createIfNoExist( dirPath+"\\"+zipName,true);
			try(ZipOutputStream zipOutputStream = new ZipOutputStream(
					new FileOutputStream(dirPath + "\\" + zipName))
			){
				zip(zipOutputStream,files,"");
			    zipOutputStream.flush();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	/**压缩多个文件或文件夹到一个压缩输出流*/
	public static void zip(ZipOutputStream out,File[] files,String base) throws Exception {
		for (int i = 0; i < files.length; i++) {
			zip(out, files[i], base +files[i].getName());
		}
	}
	/**压缩多个文件或文件夹到一个压缩包*/
    public static void zip(String zipPathname,File[] files){
		FileUtil.createIfNoExist(zipPathname,true);
		try(ZipOutputStream zipOutputStream = new ZipOutputStream(
				new FileOutputStream(zipPathname))
		){
			zip(zipOutputStream,files,"");
			zipOutputStream.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**分段压缩文件夹中的文件或文件夹到多个压缩包
	 * @param itemsPerZip 每个压缩包的文件或文件夹数*/
	public static void partitionZipDir(String dirPath,int itemsPerZip){
		File dir=new File(dirPath);
		if(!dir.isDirectory())throw new RuntimeException(dirPath+" 不是目录");
		File[] files = dir.listFiles();
	    int total= files.length/itemsPerZip;
		if(files.length%itemsPerZip!=0)total++;
		System.out.println("压缩文件数:"+total);
		int zipCount=1;
		int start,end;
		while (true){
			System.out.println("("+zipCount+"/"+total+")");
			start=(zipCount-1)*itemsPerZip;
			end=zipCount*itemsPerZip-1;
			if(end>= files.length)end= files.length-1;
			   File[] partFiles=new File[end-start+1];
			System.arraycopy(files, start, partFiles, 0, partFiles.length);
			zip(dirPath+"/zipPart"+zipCount+".zip",
					partFiles);
			if(end>= files.length-1)break;
		    zipCount++;
		}
	}
	/**压缩文件到压缩包
	 * @param zipPathname 压缩包的全路径名*/
	public static void zipFile(String filePathname,String zipPathname){
		File file=new File(filePathname);
		if(file.isFile()){
			FileUtil.createIfNoExist( zipPathname,true);
			try(ZipOutputStream zipOutputStream = new ZipOutputStream(
					new FileOutputStream(zipPathname))
			){
				zip(zipOutputStream,file,"");
				zipOutputStream.flush();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String [] temp){
		partitionZipDir("E:\\a",10);
	}
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 11:10:03  更:2022-05-06 11:11:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 0:38:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码