壓縮:java
package com.sichang.util;測試
import java.io.File;spa
import java.io.FileInputStream;.net
import java.io.FileOutputStream;對象
import java.io.IOException;ip
import java.io.InputStream;字符串
import java.util.zip.ZipEntry;get
import java.util.zip.ZipOutputStream;string
/**it
* 壓縮文件
* @author Administrator
*
*/
public class ZipOutputStreamUn {
// public static void main(String args[]) throws IOException {
//// test1();
// String AgoFileName="D:\\test";
// String AfterFilePath="D:\\test.zip";
// ManyFile(AgoFileName,AfterFilePath);
// }
/**
* 多文件壓縮
* AgoFileName 須要壓縮的文件路徑
* AfterFilePath 壓縮後的文件路徑
*
* String AgoFileName="D:\\test";
* String AfterFilePath="D:\\test.zip";
* ManyFile(AgoFileName,AfterFilePath);
*
* @throws IOException
*/
public static void ManyFile(String AgoFileName, String AfterFilePath) throws IOException {
File inFile = new File(AgoFileName);
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(AfterFilePath));
//zos.setComment("多文件處理");
zipFile(inFile, zos, "");
zos.close();
}
/**
* 單個文件壓縮
* @throws IOException
public static void SingleFile() throws IOException {
// 壓縮後存儲路徑
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("D:\\testZip.zip"), Charset.forName("GBK"));
//實例化一個名稱爲ab.txt的ZipEntry對象
ZipEntry entry = new ZipEntry("Service.txt");// 壓縮包裏面文件的名稱
//設置註釋
zos.setComment("zip測試for單個文件");
//把生成的ZipEntry對象加入到壓縮文件中,而以後往壓縮文件中寫入的內容都會放在這個ZipEntry對象裏面
zos.putNextEntry(entry);
InputStream is = new FileInputStream("D:\\Service.txt");
int len = 0;
while ((len = is.read()) != -1)
zos.write(len);
is.close();
zos.close();
}
*/
public static void zipFile(File inFile, ZipOutputStream zos, String dir) throws IOException {
if (inFile.isDirectory()) {
File[] files = inFile.listFiles();
for (File file:files)
zipFile(file, zos, dir + "\\" + inFile.getName());
} else {
String entryName = null;
if (!"".equals(dir))
entryName = dir + "\\" + inFile.getName();
else
entryName = inFile.getName();
ZipEntry entry = new ZipEntry(entryName);
zos.putNextEntry(entry);
InputStream is = new FileInputStream(inFile);
int len = 0;
while ((len = is.read()) != -1)
zos.write(len);
is.close();
}
}
}
解壓縮:
package com.sichang.util;
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 java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
/**
* 解壓縮文件
* @author Administrator
*
*/
public class ZipInputStreamUn {
// public static void main(String args[]) throws Exception {
// String AgoFileName="D:\\test.zip";
// String AfterFilePath="D:\\unpackTest\\";
// Unzip(AgoFileName,AfterFilePath);
// }
/**
* 這個方法有缺陷,不能使用!!!!!!!!!!!
* AgoFileName 須要解壓的文件路徑
* AfterFilePath 解壓後的文件路徑
*
* String AgoFileName="D:\\test.zip";
* String AfterFilePath="D:\\unpackTest\\";
* Unzip(AgoFileName,AfterFilePath);
*
* @throws Exception
*/
public static void Unzip(String AgoFileName, String AfterFilePath) throws Exception{
System.out.println("開始解壓縮文件-----------------");
File file = new File(AgoFileName);//壓縮文件
ZipFile zipFile = new ZipFile(file);//實例化ZipFile,每個zip壓縮文件均可以表示爲一個ZipFile
//實例化一個Zip壓縮文件的ZipInputStream對象,能夠利用該類的getNextEntry()方法依次拿到每個ZipEntry對象
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file));
ZipEntry zipEntry = null;
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
String fileName = zipEntry.getName();
System.out.println(fileName);
File temp = new File(AfterFilePath + fileName);
if (!temp.getParentFile().exists())
temp.getParentFile().mkdirs();
OutputStream os = new FileOutputStream(temp);
//經過ZipFile的getInputStream方法拿到具體的ZipEntry的輸入流
InputStream is = zipFile.getInputStream(zipEntry);
int len = 0;
while ((len = is.read()) != -1)
os.write(len);
os.close();
is.close();
}
zipInputStream.close();
}
/**
* 解壓到指定目錄
* @param zipPath
* @param descDir
* @author isea533
*/
public static void unZipFiles(String zipPath,String descDir)throws IOException{
// 接收字符串後轉爲File
unZipFiles(new File(zipPath), descDir);
}
/**
* 解壓文件到指定目錄
* AgoFileName 須要解壓的文件路徑
* AfterFilePath 解壓後的文件路徑
*
* String AgoFileName="D:\\test.zip";
* String AfterFilePath="D:\\unpackTest\\";
* Unzip(AgoFileName,AfterFilePath);
*/
@SuppressWarnings("rawtypes")
public static void unZipFiles(File zipFile,String descDir)throws IOException{
File pathFile = new File(descDir);
if(!pathFile.exists()){
pathFile.mkdirs();
}
ZipFile zip = new ZipFile(zipFile);
for(Enumeration entries = zip.entries();entries.hasMoreElements();){
ZipEntry entry = (ZipEntry)entries.nextElement();
String zipEntryName = entry.getName();
InputStream in = zip.getInputStream(entry);
String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;
//判斷路徑是否存在,不存在則建立文件路徑
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
if(!file.exists()){
file.mkdirs();
}
//判斷文件全路徑是否爲文件夾,若是是上面已經上傳,不須要解壓
if(new File(outPath).isDirectory()){
continue;
}
//輸出文件路徑信息
System.out.println(outPath);
OutputStream out = new FileOutputStream(outPath);
byte[] buf1 = new byte[1024];
int len;
while((len=in.read(buf1))>0){
out.write(buf1,0,len);
}
in.close();
out.close();
}
System.out.println("******************解壓完畢********************");
}
}