java解壓rar文件

該文章參考了iteye某位大蝦的博客,我自己進行了修改。請大家參考

工具類下載


package cn;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import de.innosystec.unrar.Archive;
import de.innosystec.unrar.exception.RarException;
import de.innosystec.unrar.rarfile.FileHeader;

/**
 * 對rar或者zip進行解壓縮
 * 
 * @author	xfworld
 * 
 */
public class Decompress {
	//private static String fileName = "";

	/**
	 * 對rar文件解壓
	 * 
	 * @param rarFileName
	 * @param extPlace
	 * @return
	 */
	public static boolean unrarFiles(String rarFileName, String extPlace) {
		boolean flag = false;
		Archive archive = null;
		File out = null;
		File file = null;
		File dir = null;
		FileOutputStream os = null;
		FileHeader fh = null;
		String path, dirPath = "";
		try {
			file = new File(rarFileName);
			archive = new Archive(file);
		} catch (RarException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		} finally {
			if (file != null) {
				file = null;
			}
		}
		if (archive != null) {
			try {
				fh = archive.nextFileHeader();
				while (fh != null) {
					//fileName = fh.getFileNameString().trim();
					String fileName = "";
					//for unicode
					if(fh.isUnicode()){
						fileName = fh.getFileNameW().trim();
					}else{
						fileName = fh.getFileNameString().trim();  
					}
					
					//for linux
					if(fileName.indexOf("\\\\")>0){
						//path = (extPlace + fileName).replaceAll("\\\\", File.separator);
						fileName = fileName.replaceAll("\\\\", File.separator);
					}
					if(extPlace.indexOf("\\\\")>0)
					{
						extPlace = extPlace.replaceAll("\\\\", File.separator);
					}
					File filepath=new File(extPlace);
					if(filepath.isDirectory())
					{
						
					}
					else
					{
						extPlace=extPlace+File.separator;
					}
					path= extPlace+ fileName;
					
					int end = path.lastIndexOf("/");
					if (end != -1) {
						dirPath = path.substring(0, end);
					}
					try {
						dir = new File(dirPath);
						if (!dir.exists()) {
							dir.mkdirs();
						}
					} catch (RuntimeException e1) {
						e1.printStackTrace();
					} finally {
						if (dir != null) {
							dir = null;
						}
					}
					if (fh.isDirectory()) {
						fh = archive.nextFileHeader();
						continue;
					}
					out = new File(extPlace + fileName);
					try {
						if(!out.exists())
						{ 
							out.getParentFile().mkdirs(); 
							out.createNewFile();
						}
						os = new FileOutputStream(out);
						archive.extractFile(fh, os);
					} catch (FileNotFoundException e) {
						e.printStackTrace();
					} catch (RarException e) {
						e.printStackTrace();
					}catch(Exception ee)
					{
						ee.printStackTrace();
					}
					finally {
						if (os != null) {
							try {
								os.close();
							} catch (IOException e) {
								e.printStackTrace();
							}
						}
						if (out != null) {
							out = null;
						}
					}
					fh = archive.nextFileHeader();
				}
			} catch (RuntimeException e) {
				e.printStackTrace();
			} finally {
				fh = null;
				if (archive != null) {
					try {
						archive.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
			flag = true;
		}
		return flag;
	}
}


/**
 * 
 */
package cn;

import java.io.File;

/**
 * @author xfworld
 *
 */
public class Main {

	/**
	 * 
	 */
	public Main() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//Decompress.unrarFiles("F:"+File.separator+"jquery1.7.2.rar", "d:"+File.separator);
		Decompress.unrarFiles("f:\\jquery1.7.2.rar", "d:\\1");
	}

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章