- 浏览: 556444 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
hanmiao:
另外,你的解压方法的方法名的定义改下吧,叫unzipFile( ...
JAVA实现压缩/解压缩zip文件 -
hanmiao:
快乐向日葵 写道cherryzhu 写道你好,我使用这个方法的 ...
JAVA实现压缩/解压缩zip文件 -
快乐向日葵:
cherryzhu 写道你好,我使用这个方法的时候发现了一个错 ...
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 2070File f = new File("" ... -
JAVA实现压缩/解压缩RAR文件
2007-08-09 09:56 22035public class RarToFile { ... -
关于数字类型格式化!
2007-04-23 22:10 1785今天作金额计算要用到某种特定数字表示: 查了查网上资料: 利用 ... -
JAVA对象流
2007-03-29 23:31 2064Serializable机制:将一个对象图平面化为一个字节的线 ... -
JAVA范型
2007-03-27 22:50 1624起因: JDK1.4以前类型不明确: 1.装入集合的类型都被装 ... -
JDK自带的native2ascii工具
2007-03-27 17:12 2283背景:java默认的编码方式为Unicode,而计算机系统编码 ... -
JAVA集合
2007-03-26 23:46 1416集合:将多个元素组成 ... -
JAVA异常
2007-03-25 20:15 1225异常:运行期出现的错误! Throwable 分为 Error ... -
抽象类与接口
2007-03-25 20:04 1335抽象类: 1。含有抽象方法的类必须为抽象类! 2。抽象类必须被 ... -
重写hashCode()
2007-03-25 17:09 2630Hash函数:任意长度的消息压缩成某一固定长度消息的函数。即H ... -
继承中的构造方法
2007-03-22 20:08 24921。子类的构造过程中必须先调用父类的构造方法! 2。可以先用s ... -
this 跟 super 关键字
2007-03-22 19:49 12531.它们都在堆内存中创建。因为它们之前肯定是被new出来的对象 ... -
对象包装器
2007-03-22 13:40 1180对象包装器其实就是基本类型相对应的类: Integer,Lon ... -
ArrayList
2007-03-22 13:01 1280自动伸缩数组列表ArrayList:可以存储不同数据结构的元素 ... -
JAVA数组
2007-03-22 11:21 2782数组:存储一组相同类型数据得数据结构。数组不能改变数组元素。 ... -
String與基本資料型態之間的轉換
2007-03-19 20:49 15421. 由 基本資料型態轉換成 String String 類 ... -
Thinking In JAVA 2nd 读书笔记
2007-03-07 19:08 1850第2章 一切都是对象 2.1 ... -
关于数据基本类型
2007-02-28 20:51 1223按容量从小到大排序:byte,short,char->i ... -
Thinking In Java 3rd 读书笔记
2006-10-23 17:48 1542第一章: 1.每个对象都有一个接口. 既然类被描述成为具有 ... -
翁凯JAVA学习笔记
2006-10-22 16:24 27441.JAVA不一定完全是解释性语言: JAVA源程序---&g ...
相关推荐
java 解压缩zip文件 java 解压缩zip文件 java 解压缩zip文件
使用Java核心API实现单文件/多文件/整个目录的压缩/解压缩功能,由于自带API(1.6)不支持指定编码方式,因此中文会出现乱码(1.7貌似已经支持指定编码方式),所以还写了一个基于ant包的压缩/解压缩代码。
java 实现压缩与解压缩ZIP .docjava 实现压缩与解压缩ZIP .docjava 实现压缩与解压缩ZIP .docjava 实现压缩与解压缩ZIP .doc
JAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩...
java 压缩/解压 .zip/.rar/.tar 文件,大家一起讨论,学习 已实现zip压缩/解压,rar解压
JAVA文件压缩与解压缩实践,java解压缩zip文件,Java源码
java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文)....
解决java ZIP压缩、解压缩(同时加解密)问题,代码部分
JAVA文件压缩与解压缩实践(源代码+论文)
JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与...
java实现压缩与解压缩源码,demo 分享。 java实现压缩与解压缩源码。 java实现压缩与解压缩源码 java
关于Java实现文件的zip的解压缩 文本文档 虽然不多
Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解 压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法。 zip压缩...
java语言操作解压缩文件。 /** * 数据压缩 * * @param data * @return * @throws Exception */ public static byte[] compress(byte[] data) throws Exception { ByteArrayInputStream bais = new ...
Java实现压缩解压缩文件和文件夹(附源码) zip unzip 压缩 解压缩
Java实现压缩与解压缩功能源码,简单易用。直接嵌套在你需要的地方即可。
java zip文件的压缩与解压缩,支持中文 使用apache的工具包可设置字符编码