java代码实现文件打包

网上找了一个文件打包的程序。感觉不错拿来用用^_^

package test;

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

public class Zip {

/**
* 压缩文件夹
* @param zipPath 生成的zip文件路径
* @param filePath 需要压缩的文件夹路径
* @throws Exception
*/
public void zipFolder(String zipPath, String filePath) throws Exception {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath));
File f = new File(filePath);
zipFiles(out, f, "");
out.close();
}

/**
* 压缩单一个文件
* @param zipPath 生成的zip文件路径
* @param filePath 需要压缩的文件路径
* @throws Exception
*/
public void zipFile(String zipPath, String filePath) throws Exception {
File f = new File(filePath);
FileInputStream fis = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] buf = new byte[1024];
int len;
FileOutputStream fos = new FileOutputStream(zipPath);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ZipOutputStream zos = new ZipOutputStream(bos);//压缩包
ZipEntry ze = new ZipEntry(f.getName());//这是压缩包名里的文件名
zos.putNextEntry(ze);// 写入新的ZIP文件条目并将流定位到条目数据的开始处

while ((len = bis.read(buf)) != -1) {
zos.write(buf, 0, len);
zos.flush();
}
bis.close();
zos.close();

}

/**
* 递归调用,压缩文件夹和子文件夹的所有文件
* @param out
* @param f
* @param base
* @throws Exception
*/
private void zipFiles(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++) {
zipFiles(out, fl[i], base + fl[i].getName());//递归压缩子文件夹
}
} else {
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
int b;
//System.out.println(base);
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
}
}

/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Zip File Begin");

Zip zip = new Zip();
String zipPath = "D:\\test.zip";
String filePath = "D:\\test.txt";
try {
zip.zipFile(zipPath, filePath);//压缩文件
//zip.zipFolder(zipPath, filePath);//压缩文件夹
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("Zip File Done");
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值