您的位置:首页 > 编程语言 > Java开发

JAVA 文件处理 压缩文件或文件夹 ZipOutputStream ZipEntry 文件处理

2014-01-01 18:31 1216 查看
参考地址: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<files.length; 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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: