[java]将多个文件压缩成一个zip文件

此文进阶请见:https://www.cnblogs.com/xiandedanteng/p/12155957.html

 

方法:

复制代码
package zip;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

// Used to zip a file
public class FileZipper {
    private static final int BUFFER = 512;
    
    public boolean compressFilesToZip(String[] files,String zipfile) {
        return rugularZip(files,zipfile);
    }
    
    private boolean rugularZip(String[] fromFiles,String toFile) {
        File zipFile=new File(toFile);
        byte[] buffer=new byte[BUFFER];
        int readLen=0;
        
        try {
            ZipOutputStream zipOut=new ZipOutputStream(new FileOutputStream(zipFile)) ;

            int index=0;
            for(String file:fromFiles) {
                File fileWillZip=new File(file);
                
                if(fileWillZip.exists()) {
                    InputStream inputStream=new BufferedInputStream(new FileInputStream(fileWillZip));
                    String entryName="#"+index+"_"+fileWillZip.getName();// entryName should be a valid filename,no path seperater allowed
                    zipOut.putNextEntry(new ZipEntry(entryName));
    
                    while((readLen=inputStream.read(buffer,0,BUFFER))!=-1) {
                        zipOut.write(buffer,0,readLen);
                    }
                    inputStream.close();    
                    
                    index++;
                }
            }

            zipOut.close();
        }catch(Exception e) {
            e.printStackTrace();
            return false;
        }
        
        return true;
    }
    
    public static void main(String[] args) {
        String[] files= {"D:\\wallpaper\\5760666873360998521.jpg",
                         "D:\\wallpaper\\luda1.jpg",
                         "D:\\wallpaper\\luda2.jpg",
                         "D:\\wallpaper\\luda3.jpg",
                         "D:\\wallpaper\\luda4.jpg",
                         "D:\\wallpaper\\sheeps.jpg"};
        String zipfile="D:\\wallpaper\\result.zip";
        
        FileZipper fz=new FileZipper();
        fz.compressFilesToZip(files, zipfile);
    }
}
复制代码

效果:

--END-- 2020-01-06

posted @   逆火狂飙  阅读(1666)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2017-01-06 一次性上传多个文件到服务器端(一)
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示