天天看點

java zip 高效 解壓,java實作zip的壓縮和解壓

[ public static void unzip(String warPath, String unzipPath) { File warF

[轉載:http://wintys.blog.51cto.com/425414/90872 import java.io.*; import java.util.zip.*;

public static void ZipFile(String filepath ,String zippath) {

try {

File file = new File(filepath);// 要被壓縮的檔案夾

File zipFile = new File(zippath);

InputStream input = null;

ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));

if(file.isDirectory()){//壓縮檔案夾

File[] files = file.listFiles();

for(int i = 0; i < files.length; ++i){

input = new FileInputStream(files[i]);

zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + files[i].getName()));

int temp = 0;

while((temp = input.read()) != -1){

zipOut.write(temp);

}

input.close();

}

zipOut.close();

}else{//壓縮單個檔案

input = new FileInputStream(file);

String fileName = new String(file.getName().getBytes(), "UTF-8");

zipOut.putNextEntry(new ZipEntry(fileName));

int temp = 0;

while((temp = input.read()) != -1){

zipOut.write(temp);

}

input.close();

zipOut.close();

}

zipOut.close();

} catch (Exception e) {

e.printStackTrace();

}

}

public static void ZipContraFile(String zippath ,String outfilepath ,String filename) {

try {

File file = new File(zippath);//壓縮檔案路徑和檔案名

File outFile = new File(outfilepath);//解壓後路徑和檔案名

ZipFile zipFile = new ZipFile(file);

ZipEntry entry = zipFile.getEntry(filename);//所解壓的檔案名

InputStream input = zipFile.getInputStream(entry);

OutputStream output = new FileOutputStream(outFile);

int temp = 0;

while((temp = input.read()) != -1){

output.write(temp);

}

input.close();

output.close();

} catch (Exception e) {

e.printStackTrace();

}

}

public static void ZipContraMultiFile(String zippath ,String outzippath){

try {

File file = new File(zippath);

File outFile = null;

ZipFile zipFile = new ZipFile(file);

ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file));

ZipEntry entry = null;

InputStream input = null;

OutputStream output = null;

while((entry = zipInput.getNextEntry()) != null){

System.out.println("解壓縮" + entry.getName() + "檔案");

outFile = new File(outzippath + File.separator + entry.getName());

if(!outFile.getParentFile().exists()){

outFile.getParentFile().mkdir();

}

if(!outFile.exists()){

outFile.createNewFile();

}

input = zipFile.getInputStream(entry);

output = new FileOutputStream(outFile);

int temp = 0;

while((temp = input.read()) != -1){

output.write(temp);

}

input.close();

output.close();

}

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

ZipFile("E:/zip/中文名.txt", "E:/zip/壓縮單個檔案.zip");

ZipFile("E:/zip", "E:/壓縮多個檔案.zip");

ZipContraFile("E:/zip/壓縮單個檔案.zip","E:/zip/解壓檔案.txt", "1.txt");

ZipContraMultiFile("E:/壓縮多個檔案.zip","E:/zip2");

System.out.println("********執行成功**********");

}

}

[ 本文使用了jdk1.5.0_13的源代碼。(java.uti.zip*)實作方法:首先将java.uti.zip中的源代碼解壓出來。找到DeflaterOutputStream、InflaterInputStream、ZipConstants、Zip