java 文件处理_JAVA 文件处理 压缩文件或文件夹 ZipOutputStream ZipEntry 文件处理

参考地址:http://www.blogjava.net/lhbjava/archive/2012/03/20/226363.html

在此基础上又进行了扩展压缩多文件和文件夹,(我放到了我的工具类FileUtil中),关于所有的工具类我放到了github中,大家可以下载源码参考,版本也在不断更新中:

github地址:https://github.com/369528294/ibicnCloud-util

现在将压缩的代码粘贴出来,仅供参考;

首先是JAR包的引用,需要用的是ant-1.9.2.jar,建议用MAVEN管理,这样会自动引入另一个依赖包ant-launcher-1.9.2.jar

//import java.util.zip.ZipEntry;

//import java.util.zip.ZipOutputStream;

//用ant.jar的zip.*可以解决中文文件名问题

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream;

在文件中写了2静态方法,调用第一个即可,即ZipFiles

/**

* 压缩文件

*

* @param srcfile

* File[] 需要压缩的文件列表

* @param zipfile

* File 压缩后的文件

*/

public static int ZipFiles(File[] srcfile, String zipFile) {

try {

// Create the ZIP file

OutputStream os = new FileOutputStream(zipFile);

BufferedOutputStream bs = new BufferedOutputStream(os);

ZipOutputStream out = new ZipOutputStream(bs);

// Compress the files

for (int i = 0; i < srcfile.length; i++) {

zip(srcfile[i], new File(zipFile), out, true, true);

}

out.closeEntry();

// Complete the ZIP file

out.close();

// System.out.println("压缩完成.");

return 1;

} catch (IOException e) {

e.printStackTrace();

return -1;

}

}

具体的压缩迭代使用

/**

* @param path 要压缩的路径, 可以是目录, 也可以是文件.

* @param basePath 如果path是目录,它一般为new File(path), 作用是:使输出的zip文件以此目录为根目录, 如果为null它只压缩文件, 不解压目录.

* @param zo 压缩输出流

* @param isRecursive 是否递归

* @param isOutBlankDir 是否输出空目录, 要使输出空目录为true,同时baseFile不为null.

* @throws IOException

*/

public static void zip(File inFile, File basePath, ZipOutputStream zo, boolean isRecursive, boolean isOutBlankDir) throws IOException {

File[] files = new File[0];

if(inFile.isDirectory()) { //是目录

files = inFile.listFiles();

} else if(inFile.isFile()) { //是文件

files = new File[1];

files[0] = inFile;

}

byte[] buf = new byte[1024];

int len;

//System.out.println("baseFile: "+baseFile.getPath());

for(int i=0; i

String pathName = "";

if(basePath != null) {

if(basePath.isDirectory()) {

pathName = files[i].getPath().substring(basePath.getPath().length()+1);

} else {//文件

pathName = files[i].getPath().substring(basePath.getParent().length()+1);

}

} else {

pathName = files[i].getName();

}

//System.out.println(pathName);

if(files[i].isDirectory()) {

if(isOutBlankDir && basePath != null) {

zo.putNextEntry(new ZipEntry(pathName+"/")); //可以使空目录也放进去

}

if(isRecursive) { //递归

zip(files[i], basePath, zo, isRecursive, isOutBlankDir);

}

} else {

FileInputStream fin = new FileInputStream(files[i]);

zo.putNextEntry(new ZipEntry(pathName));

while((len=fin.read(buf))>0) {

zo.write(buf,0,len);

}

fin.close();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值