- 浏览: 564873 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
hanmiao:
另外,你的解压方法的方法名的定义改下吧,叫unzipFile( ...
JAVA实现压缩/解压缩zip文件 -
hanmiao:
<div class="quote_title ...
JAVA实现压缩/解压缩zip文件 -
快乐向日葵:
<div class="quote_title ...
JAVA实现压缩/解压缩zip文件 -
nodonkey:
thx alot
Cannot find bean org.apache.struts.taglib.html.BEAN in any s -
dl96200:
代码你省略了呀,,,title后面的都给省了。不过也很感谢啦 ...
DOM解析XML例子
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.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; public class ZipToFile { public static final String ZIP_FILENAME = "C:\\XJPDA.zip";//需要解压缩的文件名 public static final String ZIP_DIR = "C:\\XJPDA\\";//需要压缩的文件夹 public static final String UN_ZIP_DIR = "C:\\";//要解压的文件目录 public static final int BUFFER = 1024 ;//缓存大小 /** * zip压缩功能. * 压缩baseDir(文件夹目录)下所有文件,包括子目录 * @throws Exception */ public static void zipFile(String baseDir,String fileName) throws Exception{ List fileList=getSubFiles(new File(baseDir)); ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(fileName)); ZipEntry ze=null; byte[] buf=new byte[BUFFER]; int readLen=0; for(int i = 0; i <fileList.size(); i++) { File f=(File)fileList.get(i); ze=new ZipEntry(getAbsFileName(baseDir, f)); ze.setSize(f.length()); ze.setTime(f.lastModified()); zos.putNextEntry(ze); InputStream is=new BufferedInputStream(new FileInputStream(f)); while ((readLen=is.read(buf, 0, BUFFER))!=-1) { zos.write(buf, 0, readLen); } is.close(); } zos.close(); } /** * 给定根目录,返回另一个文件名的相对路径,用于zip文件中的路径. * @param baseDir java.lang.String 根目录 * @param realFileName java.io.File 实际的文件名 * @return 相对文件名 */ private static String getAbsFileName(String baseDir, File realFileName){ File real=realFileName; File base=new File(baseDir); String ret=real.getName(); while (true) { real=real.getParentFile(); if(real==null) break; if(real.equals(base)) break; else ret=real.getName()+"/"+ret; } return ret; } /** * 取得指定目录下的所有文件列表,包括子目录. * @param baseDir File 指定的目录 * @return 包含java.io.File的List */ private static List getSubFiles(File baseDir){ List ret=new ArrayList(); File[] tmp=baseDir.listFiles(); for (int i = 0; i <tmp.length; i++) { if(tmp[i].isFile()) ret.add(tmp[i]); if(tmp[i].isDirectory()) ret.addAll(getSubFiles(tmp[i])); } return ret; } /** * 解压缩功能. * 将ZIP_FILENAME文件解压到ZIP_DIR目录下. * @throws Exception */ public static void upZipFile() throws Exception{ ZipFile zfile=new ZipFile(ZIP_FILENAME); Enumeration zList=zfile.entries(); ZipEntry ze=null; byte[] buf=new byte[1024]; while(zList.hasMoreElements()){ ze=(ZipEntry)zList.nextElement(); if(ze.isDirectory()){ File f=new File(ZIP_DIR+ze.getName()); f.mkdir(); continue; } OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(ZIP_DIR, ze.getName()))); InputStream is=new BufferedInputStream(zfile.getInputStream(ze)); int readLen=0; while ((readLen=is.read(buf, 0, 1024))!=-1) { os.write(buf, 0, readLen); } is.close(); os.close(); } zfile.close(); } /** * 给定根目录,返回一个相对路径所对应的实际文件名. * @param baseDir 指定根目录 * @param absFileName 相对路径名,来自于ZipEntry中的name * @return java.io.File 实际的文件 */ public static File getRealFileName(String baseDir, String absFileName){ String[] dirs=absFileName.split("/"); File ret=new File(baseDir); if(dirs.length>1){ for (int i = 0; i < dirs.length-1;i++) { ret=new File(ret, dirs[i]); } if(!ret.exists()) ret.mkdirs(); ret=new File(ret, dirs[dirs.length-1]); return ret; } return ret; } }
不过上面存在中文问题
是因为java.util.zip下的格式转换有问题
将
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
改成
import org.apache.tools.zip.*;
即可!
apache里修正了这一现象。
评论
6 楼
hanmiao
2013-11-18
另外,你的解压方法的方法名的定义改下吧,叫unzipFile(String zipFileName, String zipDir)是不是更加通用些?
5 楼
hanmiao
2013-11-18
快乐向日葵 写道
cherryzhu 写道
你好,我使用这个方法的时候发现了一个错误
在getRealFileName这个方法中,应该把ret=new File(ret, dirs[dirs.length-1]);也放到外到那个return ret;之前。
你说的这个问题确实存在的!在getRealFileName这个方法中,应该把ret=new File(ret, dirs[dirs.length-1]);也放到外到那个return ret;之前。
public static File getRealFileName(String baseDir, String absFileName){ String[] dirs=absFileName.split("/"); File ret=new File(baseDir); 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]); }
4 楼
快乐向日葵
2012-05-03
cherryzhu 写道
你好,我使用这个方法的时候发现了一个错误
在getRealFileName这个方法中,应该把ret=new File(ret, dirs[dirs.length-1]);也放到外到那个return ret;之前。
在getRealFileName这个方法中,应该把ret=new File(ret, dirs[dirs.length-1]);也放到外到那个return ret;之前。
你说的这个问题确实存在的!
3 楼
悬空90
2011-12-13
好东西 呵呵
2 楼
cherryzhu
2011-10-19
你好,我使用这个方法的时候发现了一个错误
在getRealFileName这个方法中,应该把ret=new File(ret, dirs[dirs.length-1]);也放到外到那个return ret;之前。
在getRealFileName这个方法中,应该把ret=new File(ret, dirs[dirs.length-1]);也放到外到那个return ret;之前。
1 楼
lihy328
2008-05-19
发表评论
-
File类创建流文件
2007-09-05 15:06 2182File f = new File("" ... -
JAVA实现压缩/解压缩RAR文件
2007-08-09 09:56 22120public class RarToFile { ... -
关于数字类型格式化!
2007-04-23 22:10 1822今天作金额计算要用到某种特定数字表示: 查了查网上资料: 利用 ... -
JAVA对象流
2007-03-29 23:31 2101Serializable机制:将一个对象图平面化为一个字节的线 ... -
JAVA范型
2007-03-27 22:50 1669起因: JDK1.4以前类型不明确: 1.装入集合的类型都被装 ... -
JDK自带的native2ascii工具
2007-03-27 17:12 2325背景:java默认的编码方式为Unicode,而计算机系统编码 ... -
JAVA集合
2007-03-26 23:46 1461集合:将多个元素组成 ... -
JAVA异常
2007-03-25 20:15 1261异常:运行期出现的错误! Throwable 分为 Error ... -
抽象类与接口
2007-03-25 20:04 1387抽象类: 1。含有抽象方法的类必须为抽象类! 2。抽象类必须被 ... -
重写hashCode()
2007-03-25 17:09 2701Hash函数:任意长度的消息压缩成某一固定长度消息的函数。即H ... -
继承中的构造方法
2007-03-22 20:08 25791。子类的构造过程中必须先调用父类的构造方法! 2。可以先用s ... -
this 跟 super 关键字
2007-03-22 19:49 13301.它们都在堆内存中创建。因为它们之前肯定是被new出来的对象 ... -
对象包装器
2007-03-22 13:40 1226对象包装器其实就是基本类型相对应的类: Integer,Lon ... -
ArrayList
2007-03-22 13:01 1331自动伸缩数组列表ArrayList:可以存储不同数据结构的元素 ... -
JAVA数组
2007-03-22 11:21 2843数组:存储一组相同类型数据得数据结构。数组不能改变数组元素。 ... -
String與基本資料型態之間的轉換
2007-03-19 20:49 15851. 由 基本資料型態轉換成 String String 類 ... -
Thinking In JAVA 2nd 读书笔记
2007-03-07 19:08 1893第2章 一切都是对象 2.1 ... -
关于数据基本类型
2007-02-28 20:51 1275按容量从小到大排序:byte,short,char->i ... -
Thinking In Java 3rd 读书笔记
2006-10-23 17:48 1592第一章: 1.每个对象都有一个接口. 既然类被描述成为具有 ... -
翁凯JAVA学习笔记
2006-10-22 16:24 27951.JAVA不一定完全是解释性语言: JAVA源程序---&g ...
相关推荐
使用Java核心API实现单文件/多文件/整个目录的压缩/解压缩功能,由于自带API(1.6)不支持指定编码方式,因此中文会出现乱码(1.7貌似已经支持指定编码方式),所以还写了一个基于ant包的压缩/解压缩代码。
本文详细介绍了如何使用 Java 进行 ZIP 文件的压缩与解压缩,以及如何实现文件的加密与解密功能。通过这些方法,可以有效地管理和处理大量的文件数据,提高应用程序的性能和安全性。在实际应用中,还需要注意选择...
4. **源代码实现**:实践中提供的源代码展示了如何使用Java API来实现文件和目录的压缩与解压缩。这可能包括读取文件,创建压缩流,写入数据到压缩流,以及从压缩流中读取和写入文件等步骤。 5. **文件操作**:在...
JAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩...
在Java编程语言中,`zip`...通过`ZipFile`、`ZipOutputStream`和`ZipEntry`,我们可以方便地完成文件和目录的压缩与解压缩任务。在实际应用中,理解这些类的用法和交互对于编写高效、可靠的压缩/解压缩程序至关重要。
在提供的代码片段中,`unzipFile`方法展示了如何解压缩一个`.zip`文件。它首先创建一个`ZipFile`对象,然后遍历其中的所有`ZipEntry`,如果是目录,则创建对应的目录结构;如果是文件,则通过`getInputStream`获取流...
在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。...通过上述知识点,开发者能够有效地在Java环境中进行ZIP文件的压缩与解压缩操作,满足实际项目需求。
在Java编程语言中,解压缩ZIP文件是一项常见的任务,特别是在处理数据传输、文件打包和部署等场景下。本文将深入探讨如何使用Java API来解压缩ZIP文件,包括基本概念、核心类库以及具体实现步骤。 ZIP文件是一种...
java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文)....
接下来是解压缩ZIP文件的部分。这里同样使用了`java.util.zip`包,但这次使用了`ZipFile`类。以下是解压的关键步骤: 1. 创建一个`ZipFile`对象,传入ZIP文件的路径,如`"E:\\test\\myfiles.zip"`。 2. 使用`...
JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践...
JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与...
### Java 实现 ZIP 文件压缩与解压缩 #### 知识点概述 在现代软件开发过程中,数据压缩是一项非常重要的技术,特别是在处理大量数据时。Java 作为一种广泛应用的编程语言,提供了丰富的 API 来支持文件的压缩与解...
我们将讨论核心的Java API,如`java.util.zip`包中的类,并通过一个名为`CompressFileUtils`的工具类来展示如何实现文件的解压缩功能。 首先,`java.util.zip`包提供了几个关键类,用于处理各种压缩格式,如`...
接下来,我们讨论如何解压缩ZIP文件。解压缩通常包括以下步骤: 1. **创建`ZipInputStream`**:同样,你需要创建一个`ZipInputStream`,它从ZIP文件的输入流读取。 ```java FileInputStream fis = new ...
解压缩ZIP文件的过程则相反,需要创建一个`ZipInputStream`实例,并将其链接到`FileInputStream`。通过调用`getNextEntry()`方法遍历ZIP文件中的每个条目,然后将数据读取到一个缓冲区,并写入目标文件。以下是一个...
Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解 压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法。 zip压缩...
解压缩ZIP文件的过程则相反,需要使用`ZipInputStream`从ZIP文件中读取`ZipEntry`并写入目标目录。以下是一个基本的解压缩方法: 1. 打开ZIP文件的`FileInputStream`。 2. 创建`ZipInputStream`,从输入流中读取ZIP...