- 浏览: 53299 次
- 性别:
- 来自: 江西
最新评论
-
czb6788782:
楼主,源码能不能给我学习下~谢谢
Java实现一个压缩小软件 -
hpuyancy:
好像中文会乱码啊?
利用apache ant 包进行压缩、解压缩zip,归档tar,解档tar,压缩tar.gz解压tar.gz -
shutingwang:
不错
Apache POI SpreadSheet的一些简单应用(二) -
gaowei52306:
gaowei52306 写道为啥我下载后双击无法执行?
抱歉, ...
Java实现一个压缩小软件 -
gaowei52306:
为啥我下载后双击无法执行?
Java实现一个压缩小软件
最近用到了利用java进行一序列压缩解压缩,jdk也自带了,这里我就不用它了。本例用到的开源包是apahce ant.jar。我上传了。希望对大家有帮组。
另利用这些,制作了一个java工具实现压缩(zip,tar,tar.gz,tar.bz2)功能.地址是http://lhxctc.iteye.com/blog/709492
引用
Java压缩zip,解压缩zip
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import java.util.zip.CRC32; import java.util.zip.CheckedOutputStream; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; /** * 利用Apache ant.jar中的zip包进行Zip压缩和解压 */ public class XZouZip { /** * 测试压缩 */ public void testZip(){ File srcFile = new File("c:/upload");//要压缩的文件对象 File targetZipFile = new File("c:/upload.zip");//压缩后的文件名 ZipOutputStream out = null; boolean boo = false;//是否压缩成功 try{ CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream( targetZipFile), new CRC32()); out = new ZipOutputStream(cos); //out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream("c:/uploadd.zip"))); zip(srcFile, out, "", true); boo = true; }catch(IOException ex){ throw new RuntimeException(ex); }finally{ try{ if(out!=null) out.close(); }catch(IOException ex){ throw new RuntimeException("关闭Zip输出流出现异常",ex); }finally{ //清理操作 if(!boo && targetZipFile.exists())//压缩不成功, targetZipFile.delete(); } } } /** * 测试解压缩 */ public void testUnZip(){ File srcZipFile = new File("c:/upload.zip");//要解压缩的zip文件对象 String destDir = "c:/a";//将解压文件对象放置a目录中 boolean boo = false;//是否压缩成功 try { unZip(srcZipFile,destDir); boo = true; } catch (IOException e) { throw new RuntimeException(e); }finally{ //清理操作 if(!boo) deleteDirectory(new File(destDir));//目标文件夹 。清理 } } public static void main(String[] args) throws IOException { XZouZip tool = new XZouZip(); tool.testZip(); //tool.testUnZip(); } /** * 压缩zip文件 * @param file 压缩的文件对象 * @param out 输出ZIP流 * @param dir 相对父目录名称 * @param boo 是否把空目录压缩进去 */ public void zip(File file,ZipOutputStream out,String dir,boolean boo) throws IOException{ if(file.isDirectory()){//是目录 File []listFile = file.listFiles();//得出目录下所有的文件对象 if(listFile.length == 0 && boo){//空目录压缩 out.putNextEntry(new ZipEntry(dir + file.getName() + "/"));//将实体放入输出ZIP流中 System.out.println("压缩." + dir + file.getName() + "/"); return; }else{ for(File cfile: listFile){ zip(cfile,out,dir + file.getName() + "/",boo);//递归压缩 } } }else if(file.isFile()){//是文件 System.out.println("压缩." + dir + file.getName() + "/"); byte[] bt = new byte[2048*2]; ZipEntry ze = new ZipEntry(dir+file.getName());//构建压缩实体 //设置压缩前的文件大小 ze.setSize(file.length()); out.putNextEntry(ze);////将实体放入输出ZIP流中 FileInputStream fis = null; try{ fis = new FileInputStream(file); int i=0; while((i = fis.read(bt)) != -1) {//循环读出并写入输出Zip流中 out.write(bt, 0, i); } }catch(IOException ex){ throw new IOException("写入压缩文件出现异常",ex); }finally{ try{ if (fis != null) fis.close();//关闭输入流 }catch(IOException ex){ throw new IOException("关闭输入流出现异常"); } } } } /** * 解压缩zipFile * @param file 要解压的zip文件对象 * @param outputDir 要解压到某个指定的目录下 * @throws IOException */ public void unZip(File file,String outputDir) throws IOException { ZipFile zipFile = null; try { zipFile = new ZipFile(file); createDirectory(outputDir,null);//创建输出目录 Enumeration<?> enums = zipFile.getEntries(); while(enums.hasMoreElements()){ ZipEntry entry = (ZipEntry) enums.nextElement(); System.out.println("解压." + entry.getName()); if(entry.isDirectory()){//是目录 createDirectory(outputDir,entry.getName());//创建空目录 }else{//是文件 File tmpFile = new File(outputDir + "/" + entry.getName()); createDirectory(tmpFile.getParent() + "/",null);//创建输出目录 InputStream in = null; OutputStream out = null; try{ in = zipFile.getInputStream(entry);; out = new FileOutputStream(tmpFile); int length = 0; byte[] b = new byte[2048]; while((length = in.read(b)) != -1){ out.write(b, 0, length); } }catch(IOException ex){ throw ex; }finally{ if(in!=null) in.close(); if(out!=null) out.close(); } } } } catch (IOException e) { throw new IOException("解压缩文件出现异常",e); } finally{ try{ if(zipFile != null){ zipFile.close(); } }catch(IOException ex){ throw new IOException("关闭zipFile出现异常",ex); } } } /** * 构建目录 * @param outputDir * @param subDir */ public void createDirectory(String outputDir,String subDir){ File file = new File(outputDir); if(!(subDir == null || subDir.trim().equals(""))){//子目录不为空 file = new File(outputDir + "/" + subDir); } if(!file.exists()){ file.mkdirs(); } } /** * 清理文件(目录或文件) * @param file */ public void deleteDirectory(File file){ if(file.isFile()){ file.delete();//清理文件 }else{ File list[] = file.listFiles(); if(list!=null){ for(File f: list){ deleteDirectory(f); } file.delete();//清理目录 } } } }
引用
Java压缩解压缩zip利用ant.更简单
import java.io.File; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Expand; import org.apache.tools.ant.taskdefs.Zip; import org.apache.tools.ant.types.FileSet; /** * 利用Apache ant.jar中的ant包进行Zip压缩和解压 * 这个更为简单 */ public class XZouZipByAnt { public static void main(String[] args) { XZouZipByAnt jzb = new XZouZipByAnt(); jzb.zip("c:/upload", "c:/upload.zip"); //jzb.unZip("c:/a", "c:/upload.zip"); } /** * 解压缩 * @param destDir 生成的目标目录下 c:/a * @param sourceZip 源zip文件 c:/upload.zip * 结果则是 将upload.zip文件解压缩到c:/a目录下 */ public void unZip(String destDir,String sourceZip){ try { Project prj1 = new Project(); Expand expand = new Expand(); expand.setProject(prj1); expand.setSrc(new File(sourceZip)); expand.setOverwrite(false);//是否覆盖 File f = new File(destDir); expand.setDest(f); expand.execute(); } catch (Exception e) { e.printStackTrace(); } } /** * 压缩 * * @param sourceFile * 压缩的源文件 如: c:/upload * @param targetZip * 生成的目标文件 如:c:/upload.zip */ public void zip(String sourceFile,String targetZip){ Project prj = new Project(); Zip zip = new Zip(); zip.setProject(prj); zip.setDestFile(new File(targetZip));//设置生成的目标zip文件File对象 FileSet fileSet = new FileSet(); fileSet.setProject(prj); fileSet.setDir(new File(sourceFile));//设置将要进行压缩的源文件File对象 //fileSet.setIncludes("**/*.java"); //包括哪些文件或文件夹,只压缩目录中的所有java文件 //fileSet.setExcludes("**/*.java"); //排除哪些文件或文件夹,压缩所有的文件,排除java文件 zip.addFileset(fileSet); zip.execute(); } }
引用
通过 Apache Tool 进行JAVA tar || tar.gz
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import org.apache.tools.tar.TarEntry; import org.apache.tools.tar.TarInputStream; import org.apache.tools.tar.TarOutputStream; /** * 通过 Apache Tool 进行JAVA tar || tar.gz */ public class XZouTarAndGz { /** * 测试归档tar文件 */ public File testTar(){ File srcFile = new File("c:/upload");//要归档的文件对象 File targetTarFile = new File("c:/upload.tar");//归档后的文件名 TarOutputStream out = null; boolean boo = false;//是否压缩成功 try{ out = new TarOutputStream(new BufferedOutputStream(new FileOutputStream(targetTarFile))); tar(srcFile, out, "", true); boo = true; //归档成功 return targetTarFile; }catch(IOException ex){ throw new RuntimeException(ex); }finally{ try{ if(out!=null) out.close(); }catch(IOException ex){ throw new RuntimeException("关闭Tar输出流出现异常",ex); }finally{ //清理操作 if(!boo && targetTarFile.exists())//归档不成功, targetTarFile.delete(); } } } /** * 测试压缩归档tar.gz文件 */ public void testTarGz(){ File tarFile = testTar();//生成的tar文件 File gzFile = new File(tarFile + ".gz");//将要生成的压缩文件 GZIPOutputStream out = null; InputStream in = null; boolean boo = false;//是否成功 try{ in = new FileInputStream(tarFile); out = new GZIPOutputStream(new FileOutputStream(gzFile),1024 * 2); byte b[] = new byte[1024 * 2]; int length = 0; while( (length = in.read(b)) != -1 ){ out.write(b,0,length); } boo = true; }catch(Exception ex){ throw new RuntimeException("压缩归档文件失败",ex); }finally{ try{ if(out!=null) out.close(); if(in!=null) in.close(); }catch(IOException ex){ throw new RuntimeException("关闭流出现异常",ex); }finally{ if(!boo){//清理操作 tarFile.delete(); if(gzFile.exists()) gzFile.delete(); } } } } /** * 测试解压归档tar文件 */ public void testUnTar(){ File srcTarFile = new File("c:/upload.tar");//要解压缩的tar文件对象 String destDir = "c:/XZou";//把解压的文件放置到c盘下的XZou目录下面 boolean boo = false;//是否压缩成功 try { unTar(srcTarFile,destDir); boo = true; } catch (IOException e) { throw new RuntimeException(e); }finally{ //清理操作 if(!boo) deleteDirectory(new File(destDir));//目标文件夹 。清理 } } /** * 测试解压归档tar文件 */ public void testUnTarGz(){ File srcTarGzFile = new File("c:/up.tar.gz");//要解压缩的tar.gz文件对象 String destDir = "c:/XZou";//把解压的文件放置到c盘下的XZou目录下面 boolean boo = false;//是否压缩成功 try { unTarGz(srcTarGzFile,destDir); boo = true; } catch (IOException e) { throw new RuntimeException(e); }finally{ //清理操作 if(!boo) deleteDirectory(new File(destDir));//目标文件夹 。清理 } } public static void main(String[] args) throws Exception { XZouTarAndGz jtar = new XZouTarAndGz(); //jtar.testTar(); //jtar.testTarGz(); //jtar.testUnTar(); jtar.testUnTarGz(); } /** * 归档tar文件 * @param file 归档的文件对象 * @param out 输出tar流 * @param dir 相对父目录名称 * @param boo 是否把空目录归档进去 */ public static void tar(File file,TarOutputStream out,String dir,boolean boo) throws IOException{ if(file.isDirectory()){//是目录 File []listFile = file.listFiles();//得出目录下所有的文件对象 if(listFile.length == 0 && boo){//空目录归档 out.putNextEntry(new TarEntry(dir + file.getName() + "/"));//将实体放入输出Tar流中 System.out.println("归档." + dir + file.getName() + "/"); return; }else{ for(File cfile: listFile){ tar(cfile,out,dir + file.getName() + "/",boo);//递归归档 } } }else if(file.isFile()){//是文件 System.out.println("归档." + dir + file.getName() + "/"); byte[] bt = new byte[2048*2]; TarEntry ze = new TarEntry(dir+file.getName());//构建tar实体 //设置压缩前的文件大小 ze.setSize(file.length()); //ze.setName(file.getName());//设置实体名称.使用默认名称 out.putNextEntry(ze);////将实体放入输出Tar流中 FileInputStream fis = null; try{ fis = new FileInputStream(file); int i=0; while((i = fis.read(bt)) != -1) {//循环读出并写入输出Tar流中 out.write(bt, 0, i); } }catch(IOException ex){ throw new IOException("写入归档文件出现异常",ex); }finally{ try{ if (fis != null) fis.close();//关闭输入流 out.closeEntry(); }catch(IOException ex){ throw new IOException("关闭输入流出现异常"); } } } } /** * 解压tar File * @param file 要解压的tar文件对象 * @param outputDir 要解压到某个指定的目录下 * @throws IOException */ public void unTar(File file,String outputDir) throws IOException { TarInputStream tarIn = null; try{ tarIn = new TarInputStream(new FileInputStream(file),1024 * 2); createDirectory(outputDir,null);//创建输出目录 TarEntry entry = null; while( (entry = tarIn.getNextEntry()) != null ){ if(entry.isDirectory()){//是目录 createDirectory(outputDir,entry.getName());//创建空目录 }else{//是文件 File tmpFile = new File(outputDir + "/" + entry.getName()); createDirectory(tmpFile.getParent() + "/",null);//创建输出目录 OutputStream out = null; try{ out = new FileOutputStream(tmpFile); int length = 0; byte[] b = new byte[2048]; while((length = tarIn.read(b)) != -1){ out.write(b, 0, length); } }catch(IOException ex){ throw ex; }finally{ if(out!=null) out.close(); } } } }catch(IOException ex){ throw new IOException("解压归档文件出现异常",ex); } finally{ try{ if(tarIn != null){ tarIn.close(); } }catch(IOException ex){ throw new IOException("关闭tarFile出现异常",ex); } } } /** * 解压tar.gz 文件 * @param file 要解压的tar.gz文件对象 * @param outputDir 要解压到某个指定的目录下 * @throws IOException */ public void unTarGz(File file,String outputDir) throws IOException{ TarInputStream tarIn = null; try{ tarIn = new TarInputStream(new GZIPInputStream( new BufferedInputStream(new FileInputStream(file))), 1024 * 2); createDirectory(outputDir,null);//创建输出目录 TarEntry entry = null; while( (entry = tarIn.getNextEntry()) != null ){ if(entry.isDirectory()){//是目录 createDirectory(outputDir,entry.getName());//创建空目录 }else{//是文件 File tmpFile = new File(outputDir + "/" + entry.getName()); createDirectory(tmpFile.getParent() + "/",null);//创建输出目录 OutputStream out = null; try{ out = new FileOutputStream(tmpFile); int length = 0; byte[] b = new byte[2048]; while((length = tarIn.read(b)) != -1){ out.write(b, 0, length); } }catch(IOException ex){ throw ex; }finally{ if(out!=null) out.close(); } } } }catch(IOException ex){ throw new IOException("解压归档文件出现异常",ex); } finally{ try{ if(tarIn != null){ tarIn.close(); } }catch(IOException ex){ throw new IOException("关闭tarFile出现异常",ex); } } } /** * 构建目录 * @param outputDir * @param subDir */ public void createDirectory(String outputDir,String subDir){ File file = new File(outputDir); if(!(subDir == null || subDir.trim().equals(""))){//子目录不为空 file = new File(outputDir + "/" + subDir); } if(!file.exists()){ file.mkdirs(); } } /** * 清理文件(目录或文件) * @param file */ public void deleteDirectory(File file){ if(file.isFile()){ file.delete();//清理文件 }else{ File list[] = file.listFiles(); if(list!=null){ for(File f: list){ deleteDirectory(f); } file.delete();//清理目录 } } } }
另利用这些,制作了一个java工具实现压缩(zip,tar,tar.gz,tar.bz2)功能.地址是http://lhxctc.iteye.com/blog/709492
- ant.jar (1.3 MB)
- 下载次数: 253
发表评论
-
上传下载的一个工具类
2010-05-29 14:15 2277自己做了一个上传(利用apache-fileupload组件) ... -
String.format一些用法例子、功能强、希望对您有帮组
2010-05-29 14:06 7509String.format是在JDK1.5中新 ... -
Apache POI SpreadSheet的一些简单应用(二)
2009-12-22 10:16 2946我用的版本是 poi-3.5,您可以去官方上下载。希望对大家能 ... -
根据SQL结果集构建动态二维列表展示在excel中
2009-12-08 21:39 2087近期在项目中用到根据SQL结果集构建动态二维列表展示在exce ... -
JDBC读取一些元数据的常用方法
2009-12-07 16:02 5231JDBC读取一些元数据的常用方法,网上有很多这样的DEMO,在 ... -
java中的精确商务计算
2009-12-06 21:58 972由于计算机在计算过程中的舍入关系,普通的计算和工程计算可能会出 ... -
经常使用的一些克隆实现
2009-12-04 20:54 1383在实践中往往需要使用到克隆,您可以使用java本身提供的克隆实 ... -
Apache dbcp 数据源
2009-12-03 16:59 1381使用直连数据库的话效率比较低,人们就想出另外一种概念:数据库连 ... -
Apache POI SpreadSheet的一些简单应用(一)
2009-12-03 16:35 1927我用的版本是 poi-3.5,您可以去官方上下载。 希望对大家 ... -
java.text包中的DateFormat,NumberFormat一些用法
2009-12-03 15:36 2562import java.text.DateForm ... -
java类中多个时间类型的转换处理
2009-12-03 15:06 1557public class XZou { ... -
List列表中删除指定的多个对象,利用下标来实现
2009-12-03 14:47 2211import java.util.ArrayLis ... -
Excel中列号对应数字或数字对应列号
2009-12-03 14:38 2628public class XZou { p ...
相关推荐
了解这些基础知识后,我们可以更有效地利用7-Zip和Ant处理文件压缩和解压,特别是在大型项目中,自动化这些过程可以显著提高工作效率。同时,理解XML配置文件如build.xml的内容,可以帮助我们定制化构建流程,满足...
在解压"apache-ant-1.9.16-bin.zip"后,你会得到一个名为"apache-ant-1.9.16"的目录,其中通常包含以下关键组件: 1. **bin** 目录:包含各种平台的可执行脚本,如`ant`和`ant.bat`,它们是Ant的命令行接口,用于...
安装Apache Ant 1.9.16通常涉及解压下载的"apache-ant-1.9.16-bin.tar.gz"文件。 解压过程如下: 1. 首先,你需要下载这个压缩包,通常可以通过Apache官方网站获取。 2. 使用tar命令在Linux或macOS系统中解压文件:...
nt是Java的生成工具,是Apache的核心项目; Ant类似于Unix中的Make工具,都是用来编译、生成; Ant是跨平台的,而Make不能; Ant的主要目的就是把你想做的事情自动化,不用你手动一步一步做,因为里面内置了javac...
"apache-tomcat-9.0.0.M20-src.tar.gz" 是一个包含了Tomcat 9.0.0版本M20的源代码的压缩包,适用于开发者进行深入学习、自定义配置或调试。 **Tomcat 9简介** Tomcat 9是Tomcat服务器的一个主要版本,支持Java EE 8...
这个"apache-ant-1.9.14.zip"文件是Apache Ant的1.9.14版本,一个稳定的发行版,包含了运行Ant所需的所有组件。Ant的核心理念是基于XML的build文件,也就是"build.xml",它定义了构建过程中的任务和依赖关系。 1. *...
这通常意味着解压缩后,你会得到一个名为"apache-ant-1.10.11"的目录,里面包含了Ant的所有组件,如bin目录(包含可执行脚本如`ant`和`ant.bat`),lib目录(包含Ant运行所需的jar文件),以及其他的文档、许可证和...
Ant is distributed as zip, tar.gz and tar.bz2 archives - the contents are the same. Please note that the tar.* archives contain file names longer than 100 characters and have been created using GNU ...
apache-ant-1.10.5-bin.tar.gz 本地下载 云盘下载 官网下载
利用ant api做的遍历并解压各种压缩文件格式的源代码 支持 zip, (当然) gzip tar gz bz2 bz 文件包括ant.jar, 源代码 有问题可以留言,我会及时回复 ziptest下面是用来做测试的目录。 请解压到 C:\temp\ziptest ...
1. 解压缩:使用tar命令解压此文件,例如`tar -zxvf apache-tomcat-9.0.12-src.tar.gz`,将得到源码目录。 2. 构建与安装:进入源码目录,按照README文件指示,使用Maven或Ant构建Tomcat,并将其安装到指定的系统...
Apache Ant是基于Java的构建工具。ant/binaries
1. **解压文件**:首先,你需要使用解压工具(如tar命令在Linux或macOS,或7-Zip在Windows)来解压"apache-wink-1.4-src.tar.gz",这将生成一个名为"apache-wink-1.4-src"的目录。 2. **构建项目**:进入解压后的...
标题中的"ant-googlecode-0.0.2.jar.zip"是一个压缩文件,它包含了与Apache Ant和Google Code项目相关的组件。这个文件的版本是0.0.2,表明这是一个早期的开发版本,可能包含了一些实验性的特性或者修复了一些已知...
1. **使用Apache Commons Compress库:** 这是一个非常强大的压缩工具库,不仅支持多种压缩格式(如zip、tar、gz等),还特别优化了中文文件名的支持。 2. **使用Apache Ant工具库中的Zip组件:** Apache Ant是一个...
标题中的“用ant来解压文件”指的是使用Apache Ant这一开源构建工具来处理压缩文件,如.zip或.tar.gz等。Apache Ant是Java生态系统中的一个重要组件,它基于XML来定义项目构建过程,包括编译、打包、测试等任务。在...
在这个例子中,`<taskdef>`引入了压缩库,`<zip>`和`<untar>`任务分别用于创建ZIP和解压TAR.GZ文件。 总结来说,Apache Ant的"compress"库是构建过程中处理压缩文件的强大工具,提供了一套全面的API和任务来简化这...
总的来说,"apache-ant-compress-1.5-bin-withdeps.tar.gz" 提供了一个完整的Apache Ant环境,包含了处理压缩文件所需的组件。对于Java开发者来说,这是一款不可或缺的工具,可以帮助他们高效地管理和构建项目。通过...
包含:apache-ant-1.9.14-bin.tar.gz、apache-maven-3.5.4-bin.tar.gz、apache-tomcat-6.0.41.tar.gz、jdk1-8u231-linux-x64.tar.gz、protobuf-2.5.0.tar.gz、hadoop-2.7.1-src.tar.gz
这个"apache-ant-compress-1.5-bin.tar.gz"文件是Apache Ant的一个特定版本,1.5版本,打包成tar.gz格式,这是一种常见的在Unix/Linux系统中使用的归档和压缩方式。 Ant的核心理念是“一切都是任务”,它将构建过程...