package unzip;
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.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
/**
* 功能: 1 、實(shí)現(xiàn)把指定文件夾下的所有文件壓縮為指定文件夾下指定 zip 文件 2 、實(shí)現(xiàn)把指定文件夾下的 zip 文件解壓到指定目錄下
*
* @author ffshi
*
*/
public class ZipUtils {
public static void main(String[] args) {
// 把 E 盤(pán)正則表達(dá)式文件夾下的所有文件壓縮到 E 盤(pán) stu 目錄下,壓縮后的文件名保存為 正則表達(dá)式 .zip
// zip ("E:\\ 正則表達(dá)式 ", "E:\\stu \\ 正則表達(dá)式 .zip ");
// 把 E 盤(pán) stu 目錄下的正則表達(dá)式 .zip 壓縮文件內(nèi)的所有文件解壓到 E 盤(pán) stu 目錄下面
unZip ( "E:\\stu\\ 正則表達(dá)式 .zip" , "E:\\stu" );
}
/**
* 功能:把 sourceDir 目錄下的所有文件進(jìn)行 zip 格式的壓縮,保存為指定 zip 文件 create date:2009- 6- 9
* author:Administrator
*
* @param sourceDir
* E:\\ 我的備份
* @param zipFile
* 格式: E:\\stu \\zipFile.zip 注意:加入 zipFile 我們傳入的字符串值是
* : "E:\\stu \\" 或者 "E:\\stu "
* 如果 E 盤(pán)已經(jīng)存在 stu 這個(gè)文件夾的話,那么就會(huì)出現(xiàn) java.io.FileNotFoundException: E:\stu
* ( 拒絕訪問(wèn)。 ) 這個(gè)異常,所以要注意正確傳參調(diào)用本函數(shù)哦
*
*/
public static void zip(String sourceDir, String zipFile) {
OutputStream os;
try {
os = new FileOutputStream(zipFile);
BufferedOutputStream bos = new BufferedOutputStream(os);
ZipOutputStream zos = new ZipOutputStream(bos);
File file = new File(sourceDir);
String basePath = null ;
if (file.isDirectory()) {
basePath = file.getPath();
} else {
basePath = file.getParent();
}
zipFile (file, basePath, zos);
zos.closeEntry();
zos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* create date:2009- 6- 9 author:Administrator
*
* @param source
* @param basePath
* @param zos
* @throws IOException
*/
private static void zipFile(File source, String basePath,
ZipOutputStream zos) {
File[] files = new File[0];
if (source.isDirectory()) {
files = source.listFiles();
} else {
files = new File[1];
files[0] = source;
}
String pathName;
byte [] buf = new byte [1024];
int length = 0;
try {
for (File file : files) {
if (file.isDirectory()) {
pathName = file.getPath().substring(basePath.length() + 1)
+ "/" ;
zos.putNextEntry( new ZipEntry(pathName));
zipFile (file, basePath, zos);
} else {
pathName = file.getPath().substring(basePath.length() + 1);
InputStream is = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(is);
zos.putNextEntry( new ZipEntry(pathName));
while ((length = bis.read(buf)) > 0) {
zos.write(buf, 0, length);
}
is.close();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 解壓 zip 文件,注意不能解壓 rar 文件哦,只能解壓 zip 文件 解壓 rar 文件 會(huì)出現(xiàn) java.io.IOException: Negative
* seek offset 異常 create date:2009- 6- 9 author:Administrator
*
* @param zipfile
* zip 文件,注意要是正宗的 zip 文件哦,不能是把 rar 的直接改為 zip 這樣會(huì)出現(xiàn) java.io.IOException:
* Negative seek offset 異常
* @param destDir
* @throws IOException
*/
public static void unZip(String zipfile, String destDir) {
destDir = destDir.endsWith( "\\" ) ? destDir : destDir + "\\" ;
byte b[] = new byte [1024];
int length;
ZipFile zipFile;
try {
zipFile = new ZipFile( new File(zipfile));
Enumeration enumeration = zipFile.getEntries();
ZipEntry zipEntry = null ;
while (enumeration.hasMoreElements()) {
zipEntry = (ZipEntry) enumeration.nextElement();
File loadFile = new File(destDir + zipEntry.getName());
if (zipEntry.isDirectory()) {
// 這段都可以不要,因?yàn)槊看味济菜茝淖畹讓娱_(kāi)始遍歷的
loadFile.mkdirs();
} else {
if (!loadFile.getParentFile().exists())
loadFile.getParentFile().mkdirs();
OutputStream outputStream = new FileOutputStream(loadFile);
InputStream inputStream = zipFile.getInputStream(zipEntry);
while ((length = inputStream.read(b)) > 0)
outputStream.write(b, 0, length);
}
}
System. out .println( " 文件解壓成功 " );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
也順便網(wǎng)上查了下rar格式與zip格式有什么區(qū)別:
區(qū)別一、zip的安裝比較大,并僅僅有英文版+漢化包
rar有官方的簡(jiǎn)體中文版,并且安裝很小,不足一兆
區(qū)別二、winrar的壓縮率較高,而zip的壓縮率更低
區(qū)別三、zip支持的格式很多,但已經(jīng)較老,不大流行
rar支持格式也很多,并且還是流行的
區(qū)別四、zip僅僅能夠壓縮成zip格式,不能解壓rar格式;rar不僅有自己的格式,還可以壓縮成zip格式并解壓zip格式
區(qū)別五、zip的界面沒(méi)有rar漂亮
區(qū)別六、winrar支持分卷壓縮,zip不支持
區(qū)別七、國(guó)外很多都采用zip,因?yàn)樗敲赓M(fèi)的,rar不是免費(fèi)的,在國(guó)內(nèi)很流行是由于有盜版的存在;zip不能兼容rar,是因?yàn)檫@樣必須付出一筆費(fèi)用
WinRAR 可以創(chuàng)建兩種不同的壓縮文件格式: RAR 和 ZIP
ZIP 壓縮文件
在 ZIP 文件的最大優(yōu)點(diǎn)就是普及率。比如說(shuō),大部分在 Internet 的壓縮文件都是 ZIP 壓縮文件,所以如果你要傳送壓縮文件給某一個(gè)人,但你無(wú)法確定你的收件人是否有 WinRAR 來(lái)解壓壓縮文件的內(nèi)容時(shí),使用 ZIP 格式是個(gè)好推薦。要不然你也可以發(fā)送 自解壓文件。此類(lèi)的壓縮文件稍微大了一點(diǎn)點(diǎn),但不需要任何的外部程序便可以解壓。
另一個(gè) ZIP 的優(yōu)點(diǎn)便是速度。 ZIP 壓縮文件通常在創(chuàng)建時(shí)會(huì)比 RAR 快一些。
RAR 壓縮文件
RAR 格式比 ZIP 更能夠提供較好的壓縮率,特別是在 固實(shí)模式 時(shí)。另外一個(gè) RAR 的重要功能是支持 多卷 壓縮文件。它們比起 ZIP 的“跨磁盤(pán)”壓縮文件更加便利和簡(jiǎn)易。 WinRAR 不支持 ZIP 的磁盤(pán)拆分,如果你要?jiǎng)?chuàng)建分卷壓縮文件,請(qǐng)使用 RAR 的分卷壓縮來(lái)代替。
RAR 格式也有一些在 ZIP 中所缺乏的重要功能,例如 恢復(fù)記錄,它允許物理受損數(shù)據(jù)的恢復(fù),還能 鎖定 重要的壓縮文件,以防止它們被別人意外地更改。
RAR 格式可以管理的文件大小幾乎是無(wú)限制的 (最大到 8,589,934,591 GB) ,而在 ZIP 壓縮文件的單個(gè)文件的最大值為 4 GB。需注意的是,舊式的文
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/xumiaohua/archive/2009/06/25/4297100.aspx
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/xumiaohua/archive/2009/06/25/4297100.aspx