標籤:
atitit.java提取zip rar檔案清單
1. 取zip rar檔案的情境問題 1
1.1. 多重壓縮的問題 1
1.2. 檔案名稱編碼的問題 1
1.3. 目錄的判定 1
2. rar的解析 1
2.1. JAVA使用 java-unrar-0.3.jar 解壓rar,並且解決中文亂碼(推薦) 2
2.2. mucommande 2
3. -------code 2
3.1. rrar code rarx 4
4. 參考 5
1. 取zip rar檔案的情境問題1.1. 多重壓縮的問題
為了擷取一個壓縮包中的檔案,而該壓縮包裡可能又含有壓縮包 、檔案夾、檔案夾裡又包含壓縮包、檔案等各種嵌套的情況,採用廣度優先遍曆和深度優先遍曆的方法解決了此問題。
多重壓縮包的擷取壓縮包內的檔案清單。。如果是二級子壓縮包,則需要解壓到臨時目錄,然後單層擷取。。不能直接擷取子壓縮包目錄。
1.2. 檔案名稱編碼的問題
jdk的有編碼問題。使用apache的包,使用gbk編碼就可。。
1.3. 目錄的判定
目錄,也與子檔案處於同一同級了。直接next即可。。
作者:: 老哇的爪子 Attilax 艾龍, EMAIL:[email protected]
轉載請註明來源: http://blog.csdn.net/attilax
2. rar的解析
用java怎麼提取或是解壓rar壓縮文檔?以前查了很多的資料,沒有找到相關的第三方庫,網上尋找的資料說是解析rar只能更加rar的命令列參數來解析。因為rar壓縮文檔的內部結構是沒有共開的。所以沒有專門的解析庫程式。自己也就只好用命令列了,但是在實際應用中,遇到rar加密時就遇到了問題。
所以自己又在網上很費心的找了相關資料,終於找到了一個庫可以解析rar文檔。
庫:http://www.mucommander.com/。這是個解決多種文檔的軟體,是用java寫的。所以能夠引用來解決rar的解析。
mucommander9 三嗎內五六個個api了。。8MuCommander-v0.82.rar 三。少了倆個package。。嫩欣賞幾個pkg了。官網上的不好下載。直接下載,可是個獨立的軟體,到時好西藏品質。。。giveup
2.1. JAVA使用 java-unrar-0.3.jar 解壓rar,並且解決中文亂碼(推薦)
有個項目需要解壓rar,上網搜尋一下大家都在用 java-unrar-0.3.jar ,於是寫了一個util方法解壓rar
2.2. mucommande
3. -------code
prj。atibrow。zipx
/**
* @param args
*/
public static void main(String[] args) {
try {
final String zipFileName = "E:\\00\\product3.zip";
readZipFile(zipFileName, "gbk", new Closure2() {
@Override
public Object execute(Object arg0) {
System.out.println("unziping " +zipFileName+"/"+arg0);
return null;
}
});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
unziping E:\00\product3.zip/product3/product.sql
unziping E:\00\product3.zip/product3/proxy2.zip
unziping E:\00\product3.zip/product3/dir2/匯出 - 全部詞條 ati pc in com.rar
public static void readZipFile(String zipFileName, String encode,
Closure2 clos) {
// = "utf-8";
String path = new File(zipFileName).getParent();
org.apache.tools.zip.ZipFile zipFile = null;
try {
zipFile = new ZipFile(zipFileName, encode);// , encode
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// new org.apache.tools.zip.ZipFile(zipFileName);
java.util.Enumeration e = zipFile.getEntries();
org.apache.tools.zip.ZipEntry zipEntry = null;
while (e.hasMoreElements()) {
zipEntry = (ZipEntry) e.nextElement();
String zipFileName2 = zipEntry.getName();
//path_now=zipFileName2;
if(zipEntry.isDirectory())
{
continue;
}
clos.execute(zipFileName2);
}
}
3.1. rrar code rarx
prj。atibrow。rarx
*/
public class RarX {
public static void main(String[] args) throws Exception {
unrar("E:\\down\\51vpn.rar", new Closure2() {
@Override
public Object execute(Object arg0) {
System.out.println(arg0);
return null;
}
});
}
/**
* } 解壓rar格式壓縮包。
* 對應的是java-unrar-0.3.jar,但是java-unrar-0.3.jar又會用到commons-logging-1.1.1.jar
*/
private static void unrar(String sourceRar, Closure2 cls) {
Archive a = null;
FileOutputStream fos = null;
try {
a = new Archive(new File(sourceRar));
} catch (RarException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
FileHeader fh = a.nextFileHeader();
while (fh != null) {
if (!fh.isDirectory()) {
cls.execute(fh.getFileNameString());
}
fh = a.nextFileHeader();
}
try {
a.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
a = null;
}
}
4. 參考
java怎麼讀取Zip和RAR裡面的檔案啊?_百度知道.htm
java擷取遞迴擷取嵌套壓縮包(zip和rar)中的所有檔案-Java-第七城市.htm
java提取rar文檔中的文本資料 - wqjsir的專欄 - 部落格頻道 - CSDN.NET.htm
atitit.壓縮演算法 ZLib ,gzip ,zip 最佳實務 java .net php - attilax的專欄 - 部落格頻道 - CSDN.NET.htm
Atitit. 解壓縮zip檔案 的實現最佳實務 java c# .net php - attilax的專欄 - 部落格頻道 - CSDN.NET.htm
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
atitit.提取zip rar檔案清單 java php c# 的原理與設計