广告
返回顶部
首页 > 资讯 > 精选 >在java项目中使用ant包如何实现压缩和解压缩
  • 912
分享到

在java项目中使用ant包如何实现压缩和解压缩

javaantava 2023-05-31 15:05:19 912人浏览 安东尼
摘要

在java项目中使用ant包如何实现压缩和解压缩?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java ant包中的org.apache.tools.zip实现

在java项目中使用ant包如何实现压缩和解压缩?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解

其实apache中的ant包(请自行GoOGLE之ant.jar)中有一个更好的类,已经支持中文了,我们就不重复制造轮子了,拿来用吧,
这里最主要的功能是实现了 可以指定多个文件 到同一个压缩包的功能

用org.apache.tools.zip压缩/解压缩zip文件的例子,用来解决中文乱码问题。

实例代码:

import Java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import java.util.zip.CRC32;import java.util.zip.CheckedOutputStream;import java.util.zip.Deflater;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;public class AntZipUtil { private static List list = new ArrayList(); private static List listFile(String path) { File file = new File(path); String[] array = null; String sTemp = ""; if (!file.isDirectory()) {  return null; } array = file.list(); if (array.length > 0) {  for (int i = 0; i < array.length; i++) {  sTemp = path + array[i];  file = new File(sTemp);  if (file.isDirectory()) {   listFile(sTemp + "/");  } else   list.add(sTemp);  } } else {  return null; } return list; } public static void zip(String needtozipfilepath, String zipfilepath){ try {  byte[] b = new byte[512];  File needtozipfile = new File(needtozipfilepath);  if (!needtozipfile.exists()) {  System.err.println("指定的要压缩的文件或目录不存在.");  return;  }  String zipFile = zipfilepath;  File targetFile = new File(zipFile.substring(0, zipFile.indexOf("\\") + 1));  if (!targetFile.exists()) {  System.out.println("指定的目标文件或目录不存在.");  return;  }  String filepath = needtozipfilepath;  List fileList = listFile(filepath);  FileOutputStream fileOutputStream = new FileOutputStream(zipFile);  CheckedOutputStream cs = new CheckedOutputStream(fileOutputStream,new CRC32());  ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(cs));  for (int i = 0; i < fileList.size(); i++) {  InputStream in = new FileInputStream((String) fileList.get(i));  String fileName = ((String) fileList.get(i)).replace(File.separatorChar, '/');  fileName = fileName.substring(fileName.indexOf("/") + 1);  ZipEntry e = new ZipEntry(fileName);  out.putNextEntry(e);  int len = 0;  while ((len = in.read(b)) != -1) {   out.write(b, 0, len);  }  out.closeEntry();  }  out.close(); } catch (Exception e) {  e.printStackTrace(); } } // ///////////////////////////////////////  public static boolean zip(String baseDirName, String[] fileNames,  String targetFileName, String encoding) { boolean flag = false; try {  // 判断 "压缩的根目录"是否存在! 是否是一个文件夹!  File baseDir = new File(baseDirName);  if (!baseDir.exists() || (!baseDir.isDirectory())) {  System.err.println("压缩失败! 根目录不存在: " + baseDirName);  return false;  }  // 得到这个 "压缩的根目录" 的绝对路径  String baseDirPath = baseDir.getAbsolutePath();  // 由这个 "目标 ZIP 文件" 文件名得到一个 压缩对象 ZipOutputStream  File targetFile = new File(targetFileName);  ZipOutputStream out = new ZipOutputStream(new FileOutputStream(   targetFile));  // 中文有乱码,引进下面的改造类  // CnZipOutputStream out = new CnZipOutputStream(new  // FileOutputStream(targetFile),encoding);  // 设置压缩编码Apache Ant有个包专门处理ZIP文件,可以指定文件名的编码方式。由此可以解决问题。例如:用  // org.apache.tools.zip.ZipOutputStream代替java.util.zip.ZipOutputStream。ZipOutputStream  // out = .....; out.setEncoding("GBK");  // out.setEncoding("GBK");//设置为GBK后在windows下就不会乱码了,如果要放到linux或者Unix下就不要设置了  out.setEncoding(encoding);  // "*" 表示压缩包括根目录 baseDirName 在内的全部文件 到 targetFileName文件下  if (fileNames.equals("*")) {  AntZipUtil.dirToZip(baseDirPath, baseDir, out);  } else {  File[] files = new File[fileNames.length];  for (int i = 0; i < files.length; i++) {   // 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。   files[i] = new File(baseDir, fileNames[i]);  }  if (files[0].isFile()) {   // 调用本类的一个静态方法 压缩一个文件   // CompressUtil.fileToZip(baseDirPath, file, out);   AntZipUtil.filesToZip(baseDirPath, files, out);  }  }  out.close();  // System.out.println("压缩成功! 目标文件名为: " + targetFileName);  flag = true; } catch (FileNotFoundException e) {  e.printStackTrace(); } catch (IOException e) {  e.printStackTrace(); } return flag; }  private static void fileToZip(String baseDirPath, File file,  ZipOutputStream out) throws IOException { // FileInputStream in = null; org.apache.tools.zip.ZipEntry entry = null; // 创建复制缓冲区 1024*4 = 4K byte[] buffer = new byte[1024 * 4]; int bytes_read = 0; if (file.isFile()) {  in = new FileInputStream(file);  // 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例  String zipFileName = getEntryName(baseDirPath, file);  entry = new org.apache.tools.zip.ZipEntry(zipFileName);  // "压缩文件" 对象加入 "要压缩的文件" 对象  out.putNextEntry(entry);  // 现在是把 "要压缩的文件" 对象中的内容写入到 "压缩文件" 对象  while ((bytes_read = in.read(buffer)) != -1) {  out.write(buffer, 0, bytes_read);  }  out.closeEntry();  in.close();  // System.out.println("添加文件" + file.getAbsolutePath()+ "被添加到 ZIP  // 文件中!"); } }  @SuppressWarnings("unused") private static void filesToZip(String baseDirPath, File[] files,  ZipOutputStream out) throws IOException { // 遍历所有的文件 一个一个地压缩 for (int i = 0; i < files.length; i++) {  File file = files[i];  if (file.isFile()) {  // 调用本类的一个静态方法 压缩一个文件  AntZipUtil.fileToZip(baseDirPath, file, out);  } else {    AntZipUtil.dirToZip(baseDirPath, file, out);  } } }  private static void dirToZip(String baseDirPath, File dir,  ZipOutputStream out) throws IOException { // 得到一个文件列表 (本目录下的所有文件对象集合) File[] files = dir.listFiles(); // 要是这个文件集合数组的长度为 0 , 也就证明了这是一个空的文件夹,虽然没有再循环遍历它的必要,但是也要把这个空文件夹也压缩到目标文件中去 if (files.length == 0) {  // 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例  String zipFileName = getEntryName(baseDirPath, dir);  org.apache.tools.zip.ZipEntry entry = new org.apache.tools.zip.ZipEntry(   zipFileName);  out.putNextEntry(entry);  out.closeEntry(); } else {  // 遍历所有的文件 一个一个地压缩  for (int i = 0; i < files.length; i++) {  File file = files[i];  if (file.isFile()) {   // 调用本类的一个静态方法 压缩一个文件   AntZipUtil.fileToZip(baseDirPath, file, out);  } else {      AntZipUtil.dirToZip(baseDirPath, file, out);  }  } } }  private static String getEntryName(String baseDirPath, File file) {  if (!baseDirPath.endsWith(File.separator)) {  baseDirPath += File.separator; } String filePath = file.getAbsolutePath();  if (file.isDirectory()) {  filePath += "/"; } int index = filePath.indexOf(baseDirPath); return filePath.substring(index + baseDirPath.length()); } // //////////////////////////解压缩////////////////////////////////////////  public static boolean unZip(String zipFileName, String outputDirectory) { boolean flag = false; try {  org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(   zipFileName);  java.util.Enumeration e = zipFile.getEntries();  org.apache.tools.zip.ZipEntry zipEntry = null;  createDirectory(outputDirectory, "");  while (e.hasMoreElements()) {  zipEntry = (org.apache.tools.zip.ZipEntry) e.nextElement();  // System.out.println("unziping " + zipEntry.getName());  if (zipEntry.isDirectory()) {   String name = zipEntry.getName();   name = name.substring(0, name.length() - 1);   File f = new File(outputDirectory + File.separator + name);   f.mkdir();   System.out.println("创建目录:" + outputDirectory    + File.separator + name);  } else {   String fileName = zipEntry.getName();   fileName = fileName.replace('\\', '/');   // System.out.println("测试文件1:" +fileName);   if (fileName.indexOf("/") != -1) {   createDirectory(outputDirectory, fileName.substring(0,    fileName.lastIndexOf("/")));   fileName = fileName.substring(    fileName.lastIndexOf("/") + 1, fileName     .length());   }   File f = new File(outputDirectory + File.separator    + zipEntry.getName());   f.createNewFile();   InputStream in = zipFile.getInputStream(zipEntry);   FileOutputStream out = new FileOutputStream(f);   byte[] by = new byte[1024];   int c;   while ((c = in.read(by)) != -1) {   out.write(by, 0, c);   }   out.close();   in.close();  }  flag = true;  } } catch (Exception ex) {  ex.printStackTrace(); } return flag; }  private static void createDirectory(String directory, String subDirectory) { String dir[]; File fl = new File(directory); try {  if (subDirectory == "" && fl.exists() != true)  fl.mkdir();  else if (subDirectory != "") {  dir = subDirectory.replace('\\', '/').split("/");  for (int i = 0; i < dir.length; i++) {   File subFile = new File(directory + File.separator + dir[i]);   if (subFile.exists() == false)   subFile.mkdir();   directory += File.separator + dir[i];  }  } } catch (Exception ex) {  System.out.println(ex.getMessage()); } } // ///////////////////////////////////// public static void main(String[] temp) { // 压缩 String baseDirName = "C:\\"; String[] fileNames = { "中文1.doc", "中文2.doc" }; String zipFileName = "c:\\中文.zip"; // 压缩多个指定的文件 到ZIP  System.out.println(AntZipUtil.zip(baseDirName, fileNames,zipFileName,"GBK")); //压缩一个文件夹 到ZIP String sourcePath = "c:\\test\\"; String zipFilePath = "c:\\中文2.zip"; AntZipUtil.zip(sourcePath, zipFilePath); //解压缩 //System.out.println(AntZipUtil.unZip("c:\\中文.zip", "c:\\中文")); }}

--结束END--

本文标题: 在java项目中使用ant包如何实现压缩和解压缩

本文链接: https://www.lsjlt.com/news/226874.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在java项目中使用ant包如何实现压缩和解压缩
    在java项目中使用ant包如何实现压缩和解压缩?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java ant包中的org.apache.tools.zip实现...
    99+
    2023-05-31
    java ant ava
  • 如何在Java中利用zip实现压缩和解压缩
    这篇文章主要介绍了如何在Java中利用zip实现压缩和解压缩,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和...
    99+
    2023-06-06
  • Java如何实现文件压缩为zip和解压zip压缩包
    本篇内容介绍了“Java如何实现文件压缩为zip和解压zip压缩包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!压缩成.zip代码如下:pu...
    99+
    2023-07-02
  • 怎么在java中利用压缩流实现压缩与解压
    本篇文章给大家分享的是有关怎么在java中利用压缩流实现压缩与解压,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程...
    99+
    2023-06-14
  • 如何利用Java实现zip压缩解压缩
    小编给大家分享一下如何利用Java实现zip压缩解压缩,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  zip压缩文件结构:一个zip文件由多个entry组成,每...
    99+
    2023-06-03
  • 如何在PHP中使用压缩和解压函数
    PHP作为一种流行的编程语言,提供了许多处理文件和数据的功能。其中包括压缩和解压文件的函数。这些函数可以让开发者在PHP中轻松地压缩和解压数据,从而减少文件大小并提高传输效率。本文将介绍如何在PHP中使用压缩和解压函数。一、压缩文件在PHP...
    99+
    2023-05-19
    压缩 PHP 解压函数
  • 如何在c#中使用Zlib压缩与解压
    目录介绍System.IO.Compressionzlib.netSharpZipLib速度对比总结参考与延申关于Zlib关于 Deflate 和 Raw Deflate关于CSha...
    99+
    2022-11-12
  • 如何在Linux中使用Gzip压缩和解压文件
    这篇文章主要介绍“如何在Linux中使用Gzip压缩和解压文件”,在日常操作中,相信很多人在如何在Linux中使用Gzip压缩和解压文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在Linux中使用Gz...
    99+
    2023-06-13
  • java如何实现不解压直接读取压缩包中文件的
    小编给大家分享一下java如何实现不解压直接读取压缩包中文件的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的优点是什么1. 简单,只需理解基本的概念,就...
    99+
    2023-06-14
  • 如何在JavaWeb项目中实现文件压缩下载功能
    本篇文章为大家展示了如何在JavaWeb项目中实现文件压缩下载功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体代码如下所示://文件名称    Stri...
    99+
    2023-05-31
    javaweb ava 目中
  • 如何在Python中使用zipfile压缩包模块
    这期内容当中小编将会给大家带来有关如何在Python中使用zipfile压缩包模块,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。简介ZIP 文件格式是一个常用的归档与压缩标准,zipfile 模块提供了创...
    99+
    2023-06-15
  • Linux如何使用压缩和解压到指定目录的命令
    这篇文章给大家分享的是有关Linux如何使用压缩和解压到指定目录的命令的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、命令格式:tar -zxvf 【压缩包文件名.tar.gz】 -C  【路径】/注...
    99+
    2023-06-12
  • 批处理bat+Rar如何实现批量独立压缩目录和解压目录
    小编给大家分享一下批处理bat+Rar如何实现批量独立压缩目录和解压目录,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!c:\r\a c:\r\b cd c:\r ...
    99+
    2023-06-08
  • Java 如何实现解压缩文件和文件夹
    目录一 前言 二 压缩文件 2.1 压缩多个文件 2.2 压缩文件或文件树 2.3 借助文件访问器压缩 三 解压文件 四 总结 一 前言 项目开发中,总会遇到解压缩文件的时候。比如...
    99+
    2022-11-11
  • 如何在PHP中使用load函数打包和压缩文件?
    在PHP中,打包和压缩文件是一个常见的操作。而使用load函数则是一种非常方便的方法。load函数可以将多个文件打包成一个zip压缩包,也可以将压缩包解压缩成多个文件。在本文中,我们将介绍如何使用load函数来进行文件的打包和压缩。 一、打...
    99+
    2023-08-10
    打包 函数 load
  • 如何在PHP项目中优化图片加载速度和压缩大小?
    如何在PHP项目中优化图片加载速度和压缩大小?在现代网页设计中,图像是页面内容中不可或缺的一部分。然而,过大的图像文件会导致页面加载速度缓慢,影响用户体验。因此,在PHP项目中优化图片加载速度和压缩大小是一个重要的任务。本文将介绍一些在PH...
    99+
    2023-11-02
    图片优化 缓存策略 压缩算法
  • 教你如何在 Linux 中使用 unzip 解压缩文件
    ZIP 是最广泛使用的归档文件格式,支持无损数据压缩。 ZIP 文件是包含一个或多个压缩文件或目录的数据容器。在本教程中,我们将向您展示如何使用 unzip 命令通过命令行解压缩 Linux 系统中的文件。什么...
    99+
    2023-06-05
  • 如何在PHP中使用打包函数load来压缩文件?
    PHP是一种广泛使用的开源编程语言,它提供了许多内置函数和库,使得编写高效的Web应用程序变得容易。在Web应用程序中,文件压缩是一项重要的优化技术,可以减少文件大小,从而提高网站的性能。在PHP中,我们可以使用load函数来压缩文件。 l...
    99+
    2023-08-10
    打包 函数 load
  • 在Android 应用中使用TextView时出现imageview被压缩如何解决
    在Android 应用中使用TextView时出现imageview被压缩如何解决?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代码示例如下:<!--文本少的item--...
    99+
    2023-05-31
    android textview imageview
  • 如何使用批处理实现css和js图片压缩
    这篇文章主要介绍如何使用批处理实现css和js图片压缩,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下:@echo off ::设置YUI Compressor启动目录 ...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作