import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.Vector;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
/**
* 压缩文件类,支持添加文件或文件夹
* @author Teddy
*
*/
public class ZipUtil {
/*存放添加的文件集合*/
private static Vector files = new Vector();
/*存放所有文件的集合*/
private static Vector all_files = new Vector();
/**
* 功能:
* @param args
*/
public static void main(String[] args) {
long a = System.currentTimeMillis();
System.out.println("开始压缩文件");
ZipUtil zip = new ZipUtil();
File f1 = new File("g:\\zip_test\\sogou_pinyin_52c.exe");
zip.addFile(f1);
zip.addFile(new File("g:\\xiahps\\主题\\note.Gadget"));
File ff [] = zip.getListFiles();
zip.zipFiles(ff, new File("g:\\abc.zip"), "g:\\");
zip.clear();
long b = System.currentTimeMillis()-a;
System.out.println("压缩完毕!耗时:"+(double)b/1000+"秒");
System.out.println("开始解压文件");
zip.unZipFiles("g:\\abc.zip","g:\\zzw");
long c = System.currentTimeMillis()-a;
System.out.println("解压完毕!总耗时:"+(double)c/1000+"秒");
}
public ZipUtil(){}
/**
* 添加待压缩的文件(支持添加文件夹)
* @param f
*/
public static void addFile(File f){
if(f==null||!f.exists())return;
if(!files.contains(f)) files.addElement(f);
}
/**
* 获取文件列表
* @return
*/
public static File [] getListFiles(){
File list_files [] = null;
if(files==null||files.size()==0)return null;
for(int i=0;i<files.size();i++){
File f = (File)files.get(i);
refreshFileList(f.getAbsolutePath());
}
list_files = new File[all_files.size()];
for(int i=0;i<all_files.size();i++){
list_files[i] = (File)all_files.elementAt(i);
}
return list_files;
}
/**
* 装载一个目录或文件
* @param strPath
*/
public static void refreshFileList(String strPath) {
File dir = new File(strPath);
//是文件直接装载
if(dir!=null&&dir.isFile()){all_files.add(dir);return;}
File[] ff = dir.listFiles();
if (ff == null)
return;
for (int i = 0; i < ff.length; i++) {
if (ff[i].isDirectory()) {
refreshFileList(ff[i].getAbsolutePath());
} else {
String strFileName = ff[i].getAbsolutePath().toLowerCase();
if(!all_files.contains(strFileName))
all_files.add(ff[i]);
}
}
}
/**
* 不替换路径的压缩
* @param srcfile
* @param zipfile
*/
public static void zipFiles(File[] srcfile,File zipfile){
zipFiles(srcfile,zipfile,null);
}
/**
* 功能:压缩多个文件或文件夹成一个zip文件
* @param srcfile:源文件列表
* @param zipfile:压缩后的文件
* @param repstr:绝对路径替换
*/
public static void zipFiles(File[] srcfile,File zipfile,String repstr){
byte[] buf=new byte[1024];
try {
ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipfile));
out.setEncoding("GBK");//解决中文问题
for(int i=0;i<srcfile.length;i++){
if(srcfile[i].isDirectory())zipFiles(srcfile[i].listFiles(),zipfile,repstr);//是文件夹,递归继续压缩
FileInputStream in=new FileInputStream(srcfile[i]);
if(repstr==null||repstr.equals(""))
out.putNextEntry(new ZipEntry(srcfile[i].getAbsolutePath()));
else
out.putNextEntry(new ZipEntry(com.jspsoft.util.StringEx.replace(srcfile[i].getAbsolutePath(), repstr, "")));//处理压缩文件带路径的情况,使用srcfile[i].getAbsolutePath()
//System.out.println("正在压缩 "+srcfile[i].getAbsolutePath());
int len;
//out.write(enstr.getBytes());
while((len=in.read(buf))>0){
out.write(buf,0,len);
}
out.closeEntry();
in.close();
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 默认不带解压路径就解压到当前文件夹
* @param source
*/
public static void unZipFiles(String source){
unZipFiles(source,null);
}
/**
* 解压文件
* @param source:压缩文件
* @param destination:解压地址
*/
public static void unZipFiles(String source, String destination){
try {
if(destination==null||destination.equals(""))
destination = new File(source).getParent();
int buffer=1024;
ZipFile zipFile = new ZipFile(source);
Enumeration emu = zipFile.getEntries();
while (emu.hasMoreElements()) {
ZipEntry entry = (ZipEntry) emu.nextElement();
if(destination!=null&&destination.lastIndexOf("\\")!=destination.length()-1)
destination+="\\";//增强容错性
//System.out.println("正在解压 "+destination+entry.getName());
//目录不存在创建目录
if (entry.isDirectory()) {
new File(destination + entry.getName()).mkdirs();
continue;
}
BufferedInputStream bis = new BufferedInputStream(zipFile
.getInputStream(entry));
File file = new File(destination + entry.getName());
//文件所在目录如果不存在则创建
File parent = file.getParentFile();
if (parent != null && (!parent.exists())) {
parent.mkdirs();
}
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos, buffer);
int count;
byte data[] = new byte[buffer];
while ((count = bis.read(data, 0, buffer)) != -1) {
bos.write(data, 0, count);
}
bos.flush();
bos.close();
bis.close();
}
zipFile.close();
} catch (Exception e) {e.printStackTrace();}
}
/**
* 释放资源
*/
public static void clear(){
if(all_files!=null&&all_files.size()>0)all_files.removeAllElements();
if(files!=null&&files.size()>0)files.removeAllElements();
}
public static Vector getFiles() {
return files;
}
public static void setFiles(Vector files) {
ZipUtil.files = files;
}
}
分享到:
相关推荐
JAVA实现对文件夹“加密码压缩” 此资源解压后为一个文件夹,就是一个package包 (压缩后为Zip文件) 无需导入任何个人jar包 压缩后效果等同于用winrar给压缩包加密码 时间紧迫,暂时存在中文文件夹名称乱码问题...
包含了使用的jar包,以及一个Java类,实现了使用Java对多目录多层级的文件进行打包,以及对ZIP包进行解压缩的操作。
2. 文件压缩:可批量选择文件或文件夹进行压缩,并自定义压缩级别和压缩文件名。 3. 文件解压缩:支持解压到指定目录,自动识别和处理压缩包内嵌套的子目录结构。 4. 用户界面友好:提供图形化操作界面,简化用户...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码...
本代码是一个简单的解压缩工具,其可以实现将文件压缩成压缩文件,也可解压缩(此功能与压缩类似,本人并没有...其中实现了JList的添加图标的selection还实现了将文件夹中的所有文件压缩的递归算法。请尝试。谢谢支持。
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...
Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码,文件操作,压缩包查看 Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码...
Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码,文件操作,压缩包查看 Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码...
方法一: 下载Free Spire.Presentation for Java包并解压缩,然后将lib文件夹下的jar包作为依赖项直接导入到Java应用程序中。 方法二: 通过Maven仓库安装jar包,配置pom.xml文件的代码如下:
* @param inputFileName 要压缩的文件或文件夹路径,例如:c:\\a.txt,c:\\a\ * @param outputFileName 输出zip文件的路径,例如:c:\\a.zip */ public static void zip(String inputFileName, String ...
PDF表单域是指用户在PDF文件中可以自主进行填写、选择等操作的区域,其主要目的是采集用户...方法一: 下载Free Spire.PDF for Java包并解压缩,然后将lib文件夹下的Spire.Pdf.jar包作为依赖项导入到Java应用程序中
基于zip4j的压缩工具, 支持多文件合并压缩,目录树压缩,支持编码设置,支持密码保护
一、用压缩软件打开apk,得到五个文件或文件夹 1、META-INF 2、res 3、AndroidManifest.xml 4、classes.dex 5、resources.arsc 二、xml文件是被压缩过的,可以使用AXMLPrinter2打开 三、resources.arsc保存的...
本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...