java壓縮解壓縮rar、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.IOException; import java.io.InputStream;import org.apache.tools.tar.TarEntry; import org.apache.tools.tar.TarOutputStream; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream;
import de.innosystec.unrar.Archive;
/**
- @author Every E-mail/MSN:mwgjkf@hotmail.com
- QQ:30130942
- @version 創建時間:Feb 26, 2009 6:01:11 PM
類說明:壓縮、解壓文件公用類 / public class Test { private static final int BUFFEREDSIZE = 1024; public Test() {
// TODO Auto-generated constructor stub
}
/**
- 解壓zip格式的壓縮文件到當前文件夾
- @param zipFileName
@throws Exception */ @SuppressWarnings("unchecked") public synchronized void unzipFile(String zipFileName) throws Exception { try {
File f = new File(zipFileName); ZipFile zipFile = new ZipFile(zipFileName); if((!f.exists()) && (f.length() <= 0)) { throw new Exception("要解壓的文件不存在!"); } String strPath, gbkPath, strtemp; File tempFile = new File(f.getParent()); strPath = tempFile.getAbsolutePath(); java.util.Enumeration e = zipFile.getEntries(); while(e.hasMoreElements()){ org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement(); gbkPath=zipEnt.getName(); if(zipEnt.isDirectory()){ strtemp = strPath + "/" + gbkPath; File dir = new File(strtemp); dir.mkdirs(); continue; } else { //讀寫文件 InputStream is = zipFile.getInputStream(zipEnt); BufferedInputStream bis = new BufferedInputStream(is); gbkPath=zipEnt.getName(); strtemp = strPath + "/" + gbkPath; //建目錄 String strsubdir = gbkPath; for(int i = 0; i < strsubdir.length(); i++) { if(strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) { String temp = strPath + "/" + strsubdir.substring(0, i); File subdir = new File(temp); if(!subdir.exists()) subdir.mkdir(); } } FileOutputStream fos = new FileOutputStream(strtemp); BufferedOutputStream bos = new BufferedOutputStream(fos); int c; while((c = bis.read()) != -1) { bos.write((byte) c); } bos.close(); fos.close(); } }
} catch(Exception e) {
e.printStackTrace(); throw e;
} }
/**
- 解壓zip格式的壓縮文件到指定位置
- @param zipFileName 壓縮文件
- @param extPlace 解壓目錄
@throws Exception */ @SuppressWarnings("unchecked") public synchronized void unzip(String zipFileName, String extPlace) throws Exception { try {
(new File(extPlace)).mkdirs(); File f = new File(zipFileName); ZipFile zipFile = new ZipFile(zipFileName); if((!f.exists()) && (f.length() <= 0)) { throw new Exception("要解壓的文件不存在!"); } String strPath, gbkPath, strtemp; File tempFile = new File(extPlace); strPath = tempFile.getAbsolutePath(); java.util.Enumeration e = zipFile.getEntries(); while(e.hasMoreElements()){ org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement(); gbkPath=zipEnt.getName(); if(zipEnt.isDirectory()){ strtemp = strPath + File.separator + gbkPath; File dir = new File(strtemp); dir.mkdirs(); continue; } else { //讀寫文件 InputStream is = zipFile.getInputStream(zipEnt); BufferedInputStream bis = new BufferedInputStream(is); gbkPath=zipEnt.getName(); strtemp = strPath + File.separator + gbkPath; //建目錄 String strsubdir = gbkPath; for(int i = 0; i < strsubdir.length(); i++) { if(strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) { String temp = strPath + File.separator + strsubdir.substring(0, i); File subdir = new File(temp); if(!subdir.exists()) subdir.mkdir(); } } FileOutputStream fos = new FileOutputStream(strtemp); BufferedOutputStream bos = new BufferedOutputStream(fos); int c; while((c = bis.read()) != -1) { bos.write((byte) c); } bos.close(); fos.close(); } }
} catch(Exception e) {
e.printStackTrace(); throw e;
} }
/**
- 解壓zip格式的壓縮文件到指定位置
- @param zipFileName 壓縮文件
- @param extPlace 解壓目錄
@throws Exception */ @SuppressWarnings("unchecked") public synchronized void unzip(String zipFileName, String extPlace,boolean whether) throws Exception { try {
(new File(extPlace)).mkdirs(); File f = new File(zipFileName); ZipFile zipFile = new ZipFile(zipFileName); if((!f.exists()) && (f.length() <= 0)) { throw new Exception("要解壓的文件不存在!"); } String strPath, gbkPath, strtemp; File tempFile = new File(extPlace); strPath = tempFile.getAbsolutePath(); java.util.Enumeration e = zipFile.getEntries(); while(e.hasMoreElements()){ org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement(); gbkPath=zipEnt.getName(); if(zipEnt.isDirectory()){ strtemp = strPath + File.separator + gbkPath; File dir = new File(strtemp); dir.mkdirs(); continue; } else { //讀寫文件 InputStream is = zipFile.getInputStream(zipEnt); BufferedInputStream bis = new BufferedInputStream(is); gbkPath=zipEnt.getName(); strtemp = strPath + File.separator + gbkPath; //建目錄 String strsubdir = gbkPath; for(int i = 0; i < strsubdir.length(); i++) { if(strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) { String temp = strPath + File.separator + strsubdir.substring(0, i); File subdir = new File(temp); if(!subdir.exists()) subdir.mkdir(); } } FileOutputStream fos = new FileOutputStream(strtemp); BufferedOutputStream bos = new BufferedOutputStream(fos); int c; while((c = bis.read()) != -1) { bos.write((byte) c); } bos.close(); fos.close(); } }
} catch(Exception e) {
e.printStackTrace(); throw e;
} } /**
- 壓縮zip格式的壓縮文件
- @param inputFilename 壓縮的文件或文件夾及詳細路徑
- @param zipFilename 輸出文件名稱及詳細路徑
@throws IOException */ public synchronized void zip(String inputFilename, String zipFilename) throws IOException { zip(new File(inputFilename), zipFilename); }
/**
- 壓縮zip格式的壓縮文件
- @param inputFile 需壓縮文件
- @param zipFilename 輸出文件及詳細路徑
@throws IOException */ public synchronized void zip(File inputFile, String zipFilename) throws IOException { ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFilename)); try {
zip(inputFile, out, "");
} catch (IOException e) {
throw e;
} finally {
out.close();
} }
/**
- 壓縮zip格式的壓縮文件
- @param inputFile 需壓縮文件
- @param out 輸出壓縮文件
- @param base 結束標識
- @throws IOException
*/
@SuppressWarnings("unused")
private synchronized void zip(File inputFile, ZipOutputStream out, String base) throws IOException {
if (inputFile.isDirectory()) {
} else {File[] inputFiles = inputFile.listFiles(); out.putNextEntry(new ZipEntry(base + "/")); base = base.length() == 0 ? "" : base + "/"; for (int i = 0; i < inputFiles.length; i++) { zip(inputFiles[i], out, base + inputFiles[i].getName()); }
} }if (base.length() > 0) { out.putNextEntry(new ZipEntry(base)); } else { out.putNextEntry(new ZipEntry(inputFile.getName())); } FileInputStream in = new FileInputStream(inputFile); try { int c; byte[] by = new byte[BUFFEREDSIZE]; while ((c = in.read(by)) != -1) { out.write(by, 0, c); } } catch (IOException e) { throw e; } finally { in.close(); }
/**
* 解壓tar格式的壓縮文件到指定目錄下
* @param tarFileName 壓縮文件
* @param extPlace 解壓目錄
* @throws Exception
*/
public synchronized void untar(String tarFileName, String extPlace) throws Exception{
}
/**
* 壓縮tar格式的壓縮文件
* @param inputFilename 壓縮文件
* @param tarFilename 輸出路徑
* @throws IOException
*/
public synchronized void tar(String inputFilename, String tarFilename) throws IOException{
tar(new File(inputFilename), tarFilename);
}
/**
* 壓縮tar格式的壓縮文件
* @param inputFile 壓縮文件
* @param tarFilename 輸出路徑
* @throws IOException
*/
public synchronized void tar(File inputFile, String tarFilename) throws IOException{
TarOutputStream out = new TarOutputStream(new FileOutputStream(tarFilename));
try {
tar(inputFile, out, "");
} catch (IOException e) {
throw e;
} finally {
out.close();
}
}
/**
* 壓縮tar格式的壓縮文件
* @param inputFile 壓縮文件
* @param out 輸出文件
* @param base 結束標識
* @throws IOException
*/
@SuppressWarnings("unused")
private synchronized void tar(File inputFile, TarOutputStream out, String base) throws IOException {
if (inputFile.isDirectory()) {
File[] inputFiles = inputFile.listFiles();
out.putNextEntry(new TarEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < inputFiles.length; i++) {
tar(inputFiles[i], out, base + inputFiles[i].getName());
}
} else {
if (base.length() > 0) {
out.putNextEntry(new TarEntry(base));
} else {
out.putNextEntry(new TarEntry(inputFile.getName()));
}
FileInputStream in = new FileInputStream(inputFile);
try {
int c;
byte[] by = new byte[BUFFEREDSIZE];
while ((c = in.read(by)) != -1) {
out.write(by, 0, c);
}
} catch (IOException e) {
throw e;
} finally {
in.close();
}
}
}
/**
* 解壓rar格式的壓縮文件到指定目錄下
* @param rarFileName 壓縮文件
* @param extPlace 解壓目錄
* @throws Exception
*/
public synchronized void unrar(String rarFileName, String extPlace) throws Exception{
try {
(new File(extPlace)).mkdirs();
// 構建測解壓縮類
Archive archive = new Archive();
archive.setEnabledLog(false); //不輸出日志
// 設置rar文件
archive.setFile(rarFileName);
archive.setExtractPath(extPlace);
archive.extractAllFile();
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* 執行實例
* @param args
*/
public static void main(String[] args) throws Exception {
Test decompression=new Test();
//decompression.unzipFile("d:/Inetpub.zip");
//decompression.unzip("d:/Inetpub.zip","d://Inetpub");
//decompression.zip("c:/Inetpub", "c:/Inetpub.zip");
decompression.unrar("d:/FSCapture62.rar", "d:/FSCapture62");
}
}</pre>