- 浏览: 183356 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
delu577025500:
f — 表示返回数据列,如“snd1l1yr”。更详细的参见附 ...
连接雅虎财经API获取股票信息 -
kizz:
您好,请问如何计算压缩的时间。
利用ant.jar进行解压缩 -
yangxiutian:
想查查新版的struts2的工作原理 网上全是旧版的
struts2 StrutsPrepareAndExecuteFilter 源码分析 -
695165987:
KM文件夹 怎么下载上面的文件夹啊,一个个的下载很累啊~大哥知 ...
sap portal KM 文件夹布局配置 -
nurenok:
postInit(dispatcher, filterCo ...
struts2 StrutsPrepareAndExecuteFilter 源码分析
package com.zoucq;
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.io.OutputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
/**
* 功能介绍:
* 给定一个压缩包,从中找出目标文件,并进行修改
* 要求是要遍历压缩包中所有的文件,当然就要递归解压缩子文件压缩包
* 修改完文件之后,要把文件重新打包
*/
public class ZIP {
public static void main(String args[]){
ZIP zip = new ZIP();
try {
zip.release(new File("d:/zip.zip"));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 循环递归解压缩
* @param file 带解压缩的文件
* @throws IOException
* @throws DocumentException
*/
@SuppressWarnings("unchecked")
public void release(File file) throws IOException{
//只解析后缀为.rar的包
if(file.getName().endsWith(".zip")){
ZipFile zipFile = new ZipFile(file);
//得到所有的ZipEntry,进行遍历
Enumeration zEnumeration=zipFile.getEntries();
ZipEntry zipEntry=null;
while(zEnumeration.hasMoreElements()){
zipEntry=(ZipEntry)zEnumeration.nextElement();
if(zipEntry.isDirectory()){
//如果是压缩包的子文件是文件夹,代码生成应该的文件夹
unZipDir(file,zipEntry.getName());
}else{
//如果子文件是压缩包就进行解压缩
release(file, zipEntry, zipFile);
}
}
zipFile.close();
//遍历解压后的文件夹,继续解压,递归
String zipFullName = file.getPath();
String zipName = zipFullName.substring(0,zipFullName.lastIndexOf("."));
File zipDirFile = new File(zipName);
File[] subFile = zipDirFile.listFiles();
for(int i = 0; i < subFile.length; i++){
release(subFile[i]);
}
//删除旧的压缩文件
file.delete();
//重新压缩文件
zipDir(zipDirFile,file);
//删除解压后的文件夹
deleteFile(zipDirFile);
}else if(file.isDirectory()){
File[] subFile = file.listFiles();
for(int i = 0; i < subFile.length; i++){
release(subFile[i]);
}
}else{
if(file.getName().equalsIgnoreCase("XmlStructure.xml")){
//TODO:找到目标文件进行修改
}
}
}
/**
*
* @param file
* @param zipEntry
* @param zipFile
* @throws IOException
*/
public void release(File file,ZipEntry zipEntry,ZipFile zipFile) throws IOException{
byte[] buf=new byte[1024];
OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFile(file.getPath(), zipEntry.getName())));
InputStream is=new BufferedInputStream(zipFile.getInputStream(zipEntry));
int readLen=0;
while ((readLen=is.read(buf, 0, 1024))!=-1) {
os.write(buf, 0, readLen);
}
is.close();
os.close();
}
/**
* 如果要解压缩的单元是一个文件夹
* @param unZipFile
* @param subDir
*/
public void unZipDir(File unZipFile,String subDir){
String dir = subDir.substring(0,subDir.lastIndexOf("/"));
String unZipFileName = unZipFile.getPath();
unZipFileName = unZipFileName.substring(0, unZipFileName.lastIndexOf("."));
File file = new File(unZipFileName, dir);
if(!file.exists()){
file.mkdirs();
}
}
/**
* 如果获取的文件名是parentfile/file.txt,就需要先创建文件夹parentfile,然后解压缩出文件file.txt
* @param baseDir 别解压缩的文件全路径 d:/file/unzipfile.epa
* @param absFileName 可能是一个文件名 filename,也可能是一个带父文件夹的文件名 subfile/subzip
* @return
*/
public File getRealFile(String baseDir, String fileName) {
String[] dirs = fileName.split("/");
//
File ret = new File(baseDir.substring(0,baseDir.lastIndexOf(".")));
if (dirs.length > 1) {
for (int i = 0; i < dirs.length - 1; i++) {
ret = new File(ret, dirs[i]);
}
}
if (!ret.exists()) {
ret.mkdirs();
}
return new File(ret, dirs[dirs.length - 1]);
}
/**
* 压缩文件夹
* @param sourceFile 被压缩的文件夹
* @param zipFile 压缩后的文件,默认与被压缩文件同路径
* @throws IOException
*/
public void zipDir(File sourceFile, File zipFile) throws IOException {
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipFile));
ZipOutputStream zos = new ZipOutputStream(bos);
zipFile(zos,sourceFile,"");
zos.close();
} catch (FileNotFoundException e) {
throw e;
} catch (IOException e) {
throw e;
}
}
/**
*
* @param out 压缩文件的输出流
* @param f 被压缩的文件
* @param base
* @throws IOException
* @throws Exception
*/
public void zipFile(ZipOutputStream out, File f, String base) throws IOException{
if (f.isDirectory()) {
File[] fl = f.listFiles();
//直接压缩一个空文件夹
if(fl.length == 0 && base.length() == 0){
//加一个反斜线 "/",表示新增的压缩节点是一个文件夹
out.putNextEntry(new ZipEntry(f.getName() + "/"));
}else{
//增加一个压缩节点
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < fl.length; i++) {
zipFile(out, fl[i], base + fl[i].getName());
}
}
}else {
//如果直接压缩一个文件的时候,需要用到下面的一个判断。比如待压缩的文件为->d:/zip/2ewq3.txt
base = base.length() == 0?f.getName():base;
//增加一个压缩节点
out.putNextEntry(new ZipEntry(base));
BufferedInputStream bin = new BufferedInputStream(new FileInputStream(f));
byte[] byteArray = new byte[1024];
int len = 0;
while ( (len = bin.read(byteArray)) != -1) {
out.write(byteArray,0,len);
}
bin.close();
}
}
/**
* 删除文件或者文件夹
* @param dirFile
*/
public void deleteFile(File dirFile){
if(dirFile.isDirectory()){
File[] subFileList = dirFile.listFiles();
for(int i = 0; i < subFileList.length; i++){
deleteFile(subFileList[i]);
}
dirFile.delete();
}else{
dirFile.delete();
}
}
}
发表评论
-
DWR 2
2011-06-21 13:05 1083后续: 1. 拦截器 uk.ltd.get ... -
DWR 1
2011-06-21 12:58 922原文:http://www.blogjava.net/Supe ... -
log4j.properties的路径问题
2011-06-20 11:59 5440log4j.properties如果放在web-inif/cl ... -
Class.forName
2011-06-19 19:55 1197Class.forName(xxx.xx.xx) 返回 ... -
myeclipse优化 Maven
2011-06-18 09:11 82131.禁用myeclipse updating indexes ... -
ThreadLocal学习2
2011-06-10 13:15 1166典型实例 Hiberante的HibernateSessio ... -
【转】ThreadLocal学习一
2011-06-10 11:05 1357我们知道Spring通过各种D ... -
java 动态代理 proxy InvocationHandler
2011-06-09 16:27 5394一篇杂文,写到哪就说到哪。在一些框架中有所谓的截面(aop), ... -
httpUrlConnection参数详解
2011-06-02 12:54 13497// 设置是否向httpUrlConnection输出,因为这 ... -
HttpURLConnection使用代理服务器
2011-06-02 11:48 2532目前网络上最流行的协 ... -
连接雅虎财经API获取股票信息
2011-06-02 11:29 24686一直想自己做个简单的股票系统,来记录股票的价格。在网上看了下, ... -
java字符串split方法的诡异
2011-06-01 18:01 976String str = "#123" ... -
eclipse插件
2011-05-30 14:05 813正则表达式插件 http://regex-util.sourc ... -
Hibernate annotation学习笔记1
2011-05-19 17:16 1一系列笔记所使用的数据库表关系图 -
JSPWiki的安装
2011-05-19 15:02 2382平时喜欢用word,excel文档保存一些知识点,日子久了就发 ... -
quartz监听器
2011-05-18 15:32 6903Quartz主要包含三个组件job,trigger,sched ... -
junit4新框架hamcrest的assertThat
2011-05-18 13:13 7410assertThat JUnit4.4引入了Hamcrest ... -
junit3与junit4的区别
2011-05-18 13:00 8743Junit4最大的亮点就是引入了注解(annotation), ... -
quartz日记4-触发器
2011-05-17 17:16 1104SimpleTrigger 如果需要计 ... -
quartz日记3-quartz的基本类
2011-05-17 16:46 688Quartz的几个核心的接口和类为: Job接口:自 ...
相关推荐
本话题主要聚焦于如何利用ant.jar来解压缩ZIP包。首先,你需要确保你的项目中已经引入了ant.jar。这通常可以通过Maven或Gradle等构建工具添加依赖来实现。如果你的项目不使用这些工具,你可以将ant.jar作为库文件...
本文将深入探讨如何利用ant.jar中的API创建一个自定义的文件压缩工具类,实现对文件和目录的zip与unzip操作,并关注编码设置的重要性。 首先,我们需要导入ant.jar库到项目中。在Java中,我们可以通过Maven或Gradle...
5. **处理目录**:在压缩或解压缩过程中,需要特别注意目录结构的处理。在压缩时,可能需要递归地添加目录及其所有子文件;在解压缩时,需要创建对应的目录结构。 6. **错误处理**:在实际操作中,可能出现各种错误...
例如,使用Ant定义一个构建脚本,它首先调用`java-unrar-0.5.jar`来解压RAR文件,然后利用`commons-logging-1.2.jar`记录解压过程中的日志信息。这种组合方式既实现了RAR文件的解压,又保证了日志记录的便利性,同时...
1. **解压文件**:首先,你需要解压缩`ant-jsch-1.6.jar.zip`,得到`ant-jsch-1.6.jar`和`ant.license.txt`。 2. **配置Ant**:将`ant-jsch-1.6.jar`添加到Ant的lib目录,更新类路径。 3. **编写构建脚本**:在Ant的...
《Ant-Javamail-1.6.jar...在实际应用中,为了使用ant-javamail-1.6.jar,我们需要将其解压缩后添加到Ant的类路径中。在build.xml文件中,可以这样引用: ```xml <taskdef resource="net/sf/antcontrib/antlib.xml"/> ...
要将这个扩展库应用到你的Ant项目中,首先需要解压缩"ant-jakarta-regexp.jar.zip",得到"ant-jakarta-regexp.jar"。然后,将这个JAR文件添加到你的Ant构建路径中,这通常通过修改Ant的配置文件"build.xml"来完成。...
1. 解压缩文件,得到"ant-apache-bsf-1.7.0.jar"。 2. 将此JAR文件添加到你的Ant项目的类路径中。 3. 在你的build.xml文件中,引入必要的BSF任务或定制化脚本任务。 4. 编写相应的脚本代码,可以是任何BSF支持的语言...
在实际应用中,使用“ant-sshtunnel.jar.zip”时,开发者通常会将其解压缩并添加到Ant的类路径中,以便在构建脚本中引用。为了管理依赖,开发者可以利用Maven或Gradle等依赖管理工具,将“ant-sshtunnel.jar”作为...
### JAVA解压ZIP多层目录文件(需ant.jar) #### 概述 本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip....
在使用这个压缩包时,开发者首先需要解压缩文件,然后在Ant构建脚本中引用`ant-trax-1.7.1.jar`。这可以通过在`build.xml`文件中添加`classpath`元素,并指定jar文件的路径来实现。如果`ant-trax-1.7.1.jar`提供了新...
在实际开发中,如果需要使用ant-jai-1.6.4.jar.zip,开发者首先需要解压缩文件,然后将ant-jai-1.6.4.jar添加到他们的项目构建路径。如果是基于Maven或Gradle的项目,他们需要在相应的构建配置文件中添加依赖。对于...
在使用ant-jsch-1.6.1.jar时,首先需要将其解压缩并将jar文件添加到项目的类路径中。然后,可以通过在Ant构建脚本中定义任务来利用Jsch的功能。例如,可以创建一个任务来连接到远程服务器并执行命令: ```xml ...
总的来说,"ant-robotframework-0.6.jar.zip"提供了一个便捷的方式,让Java开发者能够利用Ant执行Robot Framework的测试,从而提高项目测试的效率和自动化程度。同时,"ant.license.txt"文件确保了合法合规地使用这...
用户在使用这个JAR文件前,需要先解压缩,然后在他们的Ant构建脚本中引入这个任务,以便能够利用其提供的功能,如创建或管理DEB软件包。"ant.license.txt"文件则提供了关于这个工具的许可信息,确保用户在符合开源...
1. **解压**:首先,你需要将这个ZIP文件解压缩,获取到"ant-xslp-1.6.3.jar"文件。 2. **配置Ant**:将解压得到的JAR文件放入Ant的lib目录下,这样Ant就可以识别并使用其中的类和任务。 3. **编写Ant脚本**:在你的...
在实际使用中,开发者首先需要解压缩"ant-swing-1.6.5.jar.zip",然后将"ant-swing-1.6.5.jar"添加到项目的类路径中,以便在运行时能够访问到Ant Swing的相关类。同时,"ant.license.txt"应被保留并遵守其中的条款,...
在实际使用中,如果你下载了"ant-swing-1.6.4.jar.zip",首先需要解压缩,然后根据项目需求将"ant-swing-1.6.4.jar"添加到你的项目的类路径中。如果你在使用Apache Ant进行Swing应用的构建,这个库可能提供了一些...
使用"ant-junit-1.6.2.jar.zip"时,通常会将其解压缩并将"ant-junit-1.6.2.jar"添加到Ant的类路径中。这样,我们就可以在build.xml中编写如下的测试任务: ```xml <!-- 添加其他依赖库 --> ${...
为了使用这个库,开发者需要解压缩文件,然后将"antenna-bin.jar"添加到他们的项目类路径中,或者根据许可协议的指示进行操作。如果"antenna-bin.jar"是项目的依赖,那么在构建或运行项目时,确保正确引用它至关重要...