- 浏览: 92172 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
yangmeng_3331:
该用户名已存在 写道如果是字符串,是按照 parse 方法中的 ...
javascript时间戳与日期转换 -
该用户名已存在:
如果是字符串,是按照 parse 方法中的规则进行解析。var ...
javascript时间戳与日期转换 -
yangmeng_3331:
shiyiyue513 写道文中有诸多不妥之处。我是初学者,一 ...
Java中的栈,堆和常量池 -
shiyiyue513:
文中有诸多不妥之处。
Java中的栈,堆和常量池
windows系统默认字符集为gbk,linux默认为utf-8,使用前视情况设定字符集。后来发现一个问题。当设定字符集为gbk后压缩一个文件在windows系统用winRAR打开只能显示非中文的文件或文件夹,但是手动解压后文件全部正常,用7zip打开全部正常。文章结尾有使用的ant.jar包。
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.Enumeration; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Zip; import org.apache.tools.ant.types.FileSet; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; public class CompressFile { public final static String encoding = "gbk"; private static CompressFile instance = new CompressFile(); private CompressFile() { } public static CompressFile getInstance() { return instance; } /** * 压缩文件或者文件目录到指定的zip或者rar包 * @param inputFilename 要压缩的文件或者文件夹,如果是文件夹的话,会将文件夹下的所有文件包含子文件夹的内容进行压缩 * @param zipFilename 生成的zip或者rar文件的名称 * @throws IOException */ public synchronized void zip(String inputFilename, String zipFilename) throws Exception { zip(new File(inputFilename), zipFilename); } /** * 压缩文件或者文件目录到指定的zip或者rar包,内部调用 * @param inputFile 参数为文件类型的要压缩的文件或者文件夹 * @param zipFilename 生成的zip或者rar文件的名称 * @throws IOException */ private synchronized void zip(File inputFile, String zipFilename) throws Exception { if (!inputFile.exists()) return; //isNewFile用于判断是否是文件压缩,当时文件压缩时压缩完毕后删除创建的临时文件夹 boolean isNewFile = false; if (!inputFile.isDirectory()) { //创建文件夹 File file = new File(inputFile.getAbsolutePath().substring(0, inputFile.getAbsolutePath().lastIndexOf("."))); file.mkdirs(); BufferedInputStream inBuff = null; BufferedOutputStream outBuff = null; //将文件信息拷贝到新建文件夹下 try { File fileTmp = new File(file,inputFile.getName()); inBuff = new BufferedInputStream(new FileInputStream(inputFile)); outBuff = new BufferedOutputStream(new FileOutputStream(fileTmp)); byte[] b = new byte[1024]; int len; while ((len=inBuff.read(b))!=-1) { outBuff.write(b); } outBuff.flush(); } finally{ if (inBuff != null) inBuff.close(); if (outBuff != null) outBuff.close(); } inputFile = file; isNewFile = true; } //压缩文件 Project project = new Project(); Zip zip = new Zip(); zip.setProject(project); zip.setDestFile(new File(zipFilename)); //创建文件组 FileSet fileSet = new FileSet(); fileSet.setProject(project); fileSet.setDir(inputFile); zip.addFileset(fileSet); zip.setEncoding(CompressFile.encoding); zip.execute(); if (isNewFile) { this.deleteDirectory(inputFile); } } /** * 解压缩zip包 * @param zipFilePath zip文件路径 * @param targetPath 解压缩到的位置,如果为null或空字符串则默认解压缩到跟zip包同目录跟zip包同名的文件夹下 * @throws IOException */ public synchronized void unzip(String zipFilePath, String targetPath) throws IOException { OutputStream os = null; InputStream is = null; ZipFile zipFile = null; try { //获取需要解压缩的文件 zipFile = new ZipFile(zipFilePath,CompressFile.encoding); String directoryPath = ""; if (null == targetPath || "".equals(targetPath)) { directoryPath = zipFilePath.substring(0, zipFilePath.lastIndexOf(".")); } else { directoryPath = targetPath; } //获取压缩文件中的子目录 Enumeration entryEnum = zipFile.getEntries(); if (null != entryEnum) { ZipEntry zipEntry = null; while (entryEnum.hasMoreElements()) { zipEntry = (ZipEntry) entryEnum.nextElement(); if (zipEntry.isDirectory()) { continue; } if (zipEntry.getSize() > 0) { // 文件 File targetFile = this.buildFile(directoryPath + File.separator + zipEntry.getName(), false); os = new BufferedOutputStream(new FileOutputStream(targetFile)); is = zipFile.getInputStream(zipEntry); byte[] buffer = new byte[4096]; int readLen = 0; while ((readLen = is.read(buffer, 0, 4096)) >= 0) { os.write(buffer, 0, readLen); } os.flush(); os.close(); } else { // 空目录 this.buildFile(directoryPath + File.separator+ zipEntry.getName(), true); } } } } catch (IOException ex) { throw ex; } finally { if(null != zipFile){ zipFile = null; } if (null != is) { is.close(); } if (null != os) { os.close(); } } } /** * 生产文件 如果文件所在路径不存在则生成路径 * @param fileName 文件名 带路径 * @param isDirectory 是否为路径 * @return */ private File buildFile(String fileName, boolean isDirectory) { File target = new File(fileName); if (isDirectory) { target.mkdirs(); } else { if (!target.getParentFile().exists()) { target.getParentFile().mkdirs(); target = new File(target.getAbsolutePath()); } } return target; } /** * 删除文件 文件必须存在 * @param file * @return */ private boolean deleteFile(File file) throws Exception { boolean flag = false; if (file.isFile() && file.exists()) { flag = file.delete(); } return flag; } /** * 删除文件夹 文件夹必须存在 * @param file * @return */ private boolean deleteDirectory(File file) throws Exception { boolean flag = true; //删除文件夹下的所有文件(包括子目录) File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { //删除子文件 if (files[i].isFile()) { flag = deleteFile(files[i]); if (!flag) break; } //删除子目录 else { flag = deleteDirectory(files[i]); if (!flag) break; } } if (!flag) return false; //删除当前目录 if (file.delete()) return true; else return false; } public static void main(String[] args) { CompressFile bean = new CompressFile(); try { //测试压缩文件 bean.zip("D:\\新建 文本文档.txt", "d:/测试.zip"); bean.zip("D:\\新建文件夹", "d:/新建文件夹.zip"); bean.zip("D:\\新建文件夹1", "d:/新建文件夹1.zip"); //测试解压缩文件 bean.unzip("d:\\测试.zip", "d:"); bean.unzip("d:\\新建文件夹.zip", "d:"); bean.unzip("d:/新建文件夹1.zip", "d:"); } catch (Exception e) { e.printStackTrace(); } } }
- ant.jar (1.9 MB)
- 下载次数: 7
发表评论
-
使用Apache commons-net.jar开发FTP工具类
2014-06-10 15:33 1549最开始使用jdk自带的rt.jar开发FTP工具类,后 ... -
使用Axis2搭建web Service
2014-06-06 09:59 12871、首先下载需要的一些相关axis2.zip及jar包 ... -
使用Axis1搭建web Service
2014-06-05 12:25 645首先创建一个demo,然后建一个AxisService ... -
org.apache.commons.beanutils.PropertyUtils使用
2013-08-06 10:51 1471org.apache.commons.beanutils.Pr ... -
json-lib使用JSONObject与JSONArray
2013-06-08 16:54 8691.从Object到String 要先用Object对象构造 ... -
java字符串与unicode转换
2013-06-07 13:27 722/** * 字符串转化为unicod ... -
给定一个接口返回这个接口所有实现类
2013-02-28 09:15 1839package com.dobn.bdgcgl.test; ... -
单例模式
2013-02-27 16:39 761概念:确保一个类只有一个实例,并提供一个全局访问点来获取该实例 ... -
利用java反射实现两个具有相同属性bean赋值
2012-11-22 16:19 2293package com.dobn.bdgcgl.utils ... -
JPA 实体关系注解
2012-10-15 15:44 15431.单向一对一 @OneToMany( ... -
[转]Hibernate的复杂用法HibernateCallback
2012-09-28 10:26 1252HibernateTemplate还提供一种更加灵活的方式来操 ... -
多线程基础
2012-05-03 00:38 768线程类Thread 方法currentThread()获得一 ... -
Java编程的三十个基本规则
2011-11-15 21:37 696(1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母 ... -
Java中的栈,堆和常量池
2011-11-15 21:34 9541.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程 ...
相关推荐
总的来说,利用Apache Ant的ant.jar库,无论是通过Java代码还是Ant构建文件,都能方便、高效地解压缩ZIP文件,而且对于包含中文文件名的情况,它提供了良好的支持。在实际开发中,理解并熟练运用这类工具可以极大地...
- `unzip`: 解压缩ZIP文件到指定的目录。 - `zip`: 创建新的ZIP文件,可以包含文件和目录。 - ` zipfileset`: 在Zip任务中定义文件集,可以包含过滤器来选择特定的文件。 - `updatezip`: 更新现有ZIP文件,添加或...
在`ZipUtil`中,我们可以定义两个主要方法:`compress`用于压缩文件或目录,`unzip`用于解压缩ZIP文件。 ```java import org.apache.tools.ant.Project; import org.apache.tools.ant.types.FileSet; import org....
在Java编程中,进行文件压缩处理是一项...然后,你可以创建一个Ant构建文件(通常命名为`build.xml`),在这个文件中定义压缩或解压缩的任务。例如,以下代码片段展示了如何使用`ZipTask`创建一个ZIP文件: ```xml ...
总的来说,Apache Ant 1.7.0.jar提供了解决Android ZIP解压中文乱码问题的功能,通过自定义解压字符编码,如设置为UTF-8,可以确保中文文件名在解压缩过程中的正确性。而`ZipEntry`是Java处理ZIP文件的核心类,虽然...
在本主题中,我们将深入探讨如何使用Java来对文件进行zip压缩和解压缩,并提及`ant.jar`的作用。 首先,让我们来看一下`JavaZip.java`这个文件。它很可能包含了一个示例程序,演示了如何使用Java API来压缩和解压缩...
Java自带的解压缩不支持中文路径,此开发包支持中文的解压缩
2. **解压缩文件**:将下载的文件解压缩到一个合适的目录下,例如 `/usr/local/ant`。 3. **配置环境变量**: - **PATH**:将 Ant 的 bin 目录添加到系统 PATH 环境变量中,使得可以在任何位置调用 Ant 命令。 - ...
### JAVA解压ZIP多层目录文件(需ant.jar) #### 概述 本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip....
《Ant-Javamail-1.6.jar...在实际应用中,为了使用ant-javamail-1.6.jar,我们需要将其解压缩后添加到Ant的类路径中。在build.xml文件中,可以这样引用: ```xml <taskdef resource="net/sf/antcontrib/antlib.xml"/> ...
1. 解压缩文件,得到"ant-apache-bsf-1.7.0.jar"。 2. 将此JAR文件添加到你的Ant项目的类路径中。 3. 在你的build.xml文件中,引入必要的BSF任务或定制化脚本任务。 4. 编写相应的脚本代码,可以是任何BSF支持的语言...
在Ant中,构建过程是由一系列的任务(tasks)组成的,这些任务可以执行如编译源代码、创建JAR文件、运行测试、打包应用等操作。Ant的核心设计理念是“简单的事情应该简单,复杂的事情应该可能”,这使得它成为一个...
`ant.jar` 是Apache Ant的库文件,它是一个基于Java的任务驱动的构建系统。Ant广泛用于自动化Java项目的构建、编译、测试和打包过程。它的任务是通过XML描述的构建文件来执行的,这些文件定义了各种构建步骤和依赖...
在实际使用"ant-antlr.jar.zip"时,开发者首先需要解压缩该文件,获取"ant-antlr.jar"和"ant.license.txt"。然后,在构建脚本中引入"ant-antlr.jar",这样Ant就可以识别并处理ANTLR相关的任务。例如,如果你有一个...
在实际使用中,如果你下载了"ant-launcher-1.6.5.jar.zip",你需要先解压缩,然后可以将"ant-launcher-1.6.5.jar"添加到你的系统路径中,以便在命令行中直接调用"ant"命令执行构建任务。同时,了解并遵守"ant....
例如,使用Ant定义一个构建脚本,它首先调用`java-unrar-0.5.jar`来解压RAR文件,然后利用`commons-logging-1.2.jar`记录解压过程中的日志信息。这种组合方式既实现了RAR文件的解压,又保证了日志记录的便利性,同时...
当开发者在项目中引用这个JAR时,他们需要先解压缩文件,然后将ant-xalan1-1.6.1.jar添加到项目的类路径中。 **ant.license.txt**: 这个文件通常包含软件的许可信息,详细说明了如何合法地使用、修改和分发ant-...
要将这个扩展库应用到你的Ant项目中,首先需要解压缩"ant-jakarta-regexp.jar.zip",得到"ant-jakarta-regexp.jar"。然后,将这个JAR文件添加到你的Ant构建路径中,这通常通过修改Ant的配置文件"build.xml"来完成。...
Ant使用了自己的实现来处理ZIP文件,其内部的`org.apache.tools.ant.types.ZipFileSet`和`org.apache.tools.ant.taskdefs.Zip`类在处理包含中文文件名的ZIP时表现得更为友好。Ant默认使用UTF-8编码,所以它能更好地...
在使用"ant-contrib-0.3.jar.zip"时,开发者通常会将其解压缩并将"ant-contrib-0.3.jar"添加到Ant的类路径中。这样,Ant就可以识别并执行Ant-Contrib提供的额外任务。在构建脚本中,通过引入`<taskdef>`标签来注册...