zoukankan
html css js c++ java
Java解压缩Zip 文件
package
com.test;
import
java.io.BufferedInputStream;
import
java.io.BufferedOutputStream;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileOutputStream;
import
java.io.InputStream;
import
java.util.Enumeration;
import
java.util.zip.ZipEntry;
import
java.util.zip.ZipFile;
import
java.util.zip.ZipOutputStream;
public
class
TestZip
{
/** */
/**
* zip压缩功能测试. 将d:\\temp\\zipout目录下的所有文件连同子目录压缩到d:\\temp\\out.zip.
*
*
@throws
Exception
*/
@SuppressWarnings(
"
unchecked
"
)
public
void
CreateZip(String zipUrl, String zipName)
throws
Exception
{
//
压缩baseDir下所有文件,包括子目录
String baseDir
=
zipUrl;
List fileList
=
getSubFiles(
new
File(baseDir));
//
压缩文件名
ZipOutputStream zos
=
new
ZipOutputStream(
new
FileOutputStream(zipName));
ZipEntry ze
=
null
;
byte
[] buf
=
new
byte
[
1024
];
int
readLen
=
0
;
for
(
int
i
=
0
; i
<
fileList.size(); i
++
)
{
File f
=
(File) fileList.get(i);
System.out.print(
"
Adding:
"
+
f.getPath()
+
f.getName());
//
创建一个ZipEntry,并设置Name和其它的一些属性
ze
=
new
ZipEntry(getAbsFileName(baseDir, f));
ze.setSize(f.length());
ze.setTime(f.lastModified());
//
将ZipEntry加到zos中,再写入实际的文件内容
zos.putNextEntry(ze);
InputStream is
=
new
BufferedInputStream(
new
FileInputStream(f));
while
((readLen
=
is.read(buf,
0
,
1024
))
!=
-
1
)
{
zos.write(buf,
0
, readLen);
}
is.close();
System.out.println(
"
done
"
);
}
zos.close();
}
/** */
/**
* 取得指定目录下的所有文件列表,包括子目录.
*
*
@param
baseDir
* File 指定的目录
*
@return
包含java.io.File的List
*/
@SuppressWarnings(
"
unchecked
"
)
private
List getSubFiles(File baseDir)
{
List ret
=
new
ArrayList();
//
File base=new File(baseDir);
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文件中的路径.
*
*
@param
baseDir
* java.lang.String 根目录
*
@param
realFileName
* java.io.File 实际的文件名
*
@return
相对文件名
*/
private
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;
}
public
static
void
main(String[] args)
{
TestZip.zipFile();
//
TestZip.unzip(url, dest);
}
/** */
/**
* 解压缩zip文件
*/
@SuppressWarnings(
"
unchecked
"
)
public
static
void
unzip(String zipFile, String dest)
throws
Exception
{
//
String ctxUrl = ServletActionContext.getRequest().getRealPath("/upload");
//
String url = ctxUrl + "\\" + fileName;
//
String dest = ctxUrl;
//
zipFile = url;
ZipFile zip
=
new
ZipFile(zipFile);
Enumeration
<
ZipEntry
>
en
=
(Enumeration)zip.entries();
ZipEntry entry
=
null
;
byte
[] buffer
=
new
byte
[
1024
];
int
length
=
-
1
;
InputStream input
=
null
;
BufferedOutputStream bos
=
null
;
File file
=
null
;
while
(en.hasMoreElements())
{
entry
=
(ZipEntry) en.nextElement();
if
(entry.isDirectory())
{
file
=
new
File(dest, entry.getName());
if
(
!
file.exists())
{
file.mkdir();
}
continue
;
}
input
=
zip.getInputStream(entry);
file
=
new
File(dest, entry.getName());
if
(
!
file.getParentFile().exists())
{
file.getParentFile().mkdirs();
}
bos
=
new
BufferedOutputStream(
new
FileOutputStream(file));
while
(
true
)
{
length
=
input.read(buffer);
if
(length
==
-
1
)
break
;
bos.write(buffer,
0
, length);
}
bos.close();
input.close();
}
zip.close();
}
}
查看全文
相关阅读:
大网管 www.bigit.com
WinAPI: midiOutUnprepareHeader 清除由 midiOutPrepareHeader 完成的准备
WinAPI: midiInGetNumDevs 获取 MIDI 输入设备的数目
WinAPI: midiInUnprepareHeader 清除由 midiInPrepareHeader 完成的准备
WinAPI: midiInPrepareHeader 为 MIDI 输入准备一个缓冲区
转贴一组 Delphi 官方网站介绍 IDE 功能的动画
WinAPI: midiOutPrepareHeader 为 MIDI输出准备一个缓冲区
WinAPI: midiOutGetNumDevs 获取 MIDI 输出设备的数目
WinAPI: midiInGetID 获取输入设备 ID
动画演示 Delphi 2007 IDE 功能[4] 自定义界面
原文地址:https://www.cnblogs.com/pricks/p/1600051.html
最新文章
Windows Azure,现在有了更多的企业访问管理方法 !
To kernel driver monitoring process developed in Windows8 create using Visual studio2012
电影《泰囧》中的一个穿帮漏洞
EHealth使用微软云计算解决方案,大大降低了成本并提高了服务
[转载]MySQL数据库增长用户权限GRANT/INSERT INTO user VALUES/FLUSH
[转载]Informix Dynamic Server维护手册
[转载]对INFORMIX终了Update Statistics(转)
[转载]oninit onmode onspaces onparams onstat
[转载]怎样处置责罚informix晋级后不能使用Netvault GUI举行备份成绩
[转载]Informix4gl挪用C语言md5加密函数
热门文章
[转载]Windows下布置informix
[转载]Netvault:操纵Informix APM v2.1时有哪些留神变乱
[转载]MySQL优化之索引的运用(2)
[转载]informix设置文件:onconfig阐明');
[转载]INFORMIX SQL语句笔记(一)按季度统计出库金额
[转载]MySQL优化之数据典范模范的运用
[转载]Netvault:如安在NVDB中减少informix log产生的义务
[转载]Informix Online数据库一样往常经管及维护
[转载]INFORMIX SQL语句条记(二)体系表使用
[转载]informix合用法子:onstat,onparams,ontape,dbschema,onspaces,onmode,oninit
Copyright © 2011-2022 走看看