資源簡介
可以解決包含中文文件夾的zip包解壓的問題
/**
* 解壓縮zipFile
* @param file 要解壓的zip文件對象
* @param outputDir 要解壓到某個指定的目錄下
* @throws IOException
*/
public void unzip(String zipFileName, String outputDir) throws IOException {
try {
BufferedOutputStream bos = null;
// 創建輸入字節流
FileInputStream fis = new FileInputStream(zipFileName);
// 根據輸入字節流創建輸入字符流
BufferedInputStream bis = new BufferedInputStream(fis);
// 根據字符流,創建ZIP文件輸入流
ZipInputStream zis = new ZipInputStream(bis);
// zip文件條目,表示zip文件
ZipEntry entry;
// 循環讀取文件條目,只要不為空,就進行處理
while ((entry = zis.getNextEntry()) != null) {
int count;
byte date[] = new byte[2048];
// 如果條目是文件目錄,則繼續執行
if (entry.isDirectory()) {
continue;
} else {
int begin = zipFileName.lastIndexOf("\\") + 1;
int end = zipFileName.lastIndexOf(".") + 1;
String zipRealName = zipFileName.substring(begin, end);
bos = new BufferedOutputStream(new FileOutputStream(this
.getRealFileName(outputDir + "\\" + zipRealName,
entry.getName())));
while ((count = zis.read(date)) != -1) {
bos.write(date, 0, count);
}
bos.flush();
bos.close();
}
}
zis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private File getRealFileName(String zippath, String absFileName) {
String[] dirs = absFileName.split("/", absFileName.length());
// 創建文件對象
File file = new File(zippath);
if (dirs.length > 1) {
for (int i = 0; i < dirs.length - 1; i++) {
// 根據file抽象路徑和dir路徑字符串創建一個新的file對象,路徑為文件的上一個目錄
file = new File(file, dirs[i]);
}
}
if (!file.exists()) {
file.mkdirs();
}
file = new File(file, dirs[dirs.length - 1]);
return file;
}

代碼片段和文件信息
package?com.originsys.eap.tools;
import?java.io.BufferedInputStream;
import?java.io.BufferedOutputStream;
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileOutputStream;
public?class?CompresszZipFile?{
static?final?int?BUFFER?=?2048;
/**
?*?讀取ZIP文件,只適合于ZIP文件對于RAR文件無效,因為ZIP文件的壓縮算法是公開的,而RAR不是
?*?@author?彭建明
?*?@version?1.0
?*?@param?zipfilepath:ZIP文件的路徑,unzippath:要解壓到的文件路徑
?*/
public?void?ReadZip(String?zipfilepathString?unzippath){
try?{
BufferedOutputStream?bos?=?null;
//創建輸入字節流
FileInputStream?fis?=?new?FileInputStream(zipfilepath);
//根據輸入字節流創建輸入字符流
BufferedInputStream?bis?=?new?BufferedInputStream(fis);
//根據字符流,創建ZIP文件輸入流
ZipInputStream?zis?=?new?ZipInputStream(bis);
//zip文件條目,表示zip文件
ZipEntry?entry;
//循環讀取文件條目,只要不為空,就進行處理
while((entry=zis.getNextEntry())!=null){
System.out.println(“====“+entry.getName());
int?count?;
byte?date[]?=?new?byte[BUFFER];
//如果條目是文件目錄,則繼續執行
if(entry.isDirectory()){
continue;
}else{
int?begin?=?zipfilepath.lastIndexOf(“\\“)+1;
int?end?=?zipfilepath.lastIndexOf(“.“)+1;
String?zipRealName?=?zipfilepath.substring(beginend);
bos?=?new?BufferedOutputStream(new?FileOutputStream(this.getRealFileName(unzippath+“\\“+zipRealNameentry.getName())));
while((count=zis.read(date))!=-1){
bos.write(date0count);
}
bos.flush();bos.close();
}
}
zis.close();
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
private?File?getRealFileName(String?zippathString?absFileName){
String[]?dirs?=?absFileName.split(“/“absFileName.length());
//創建文件對象?
File?file?=?new?File(zippath);
if(dirs.length>1){
for(int?i=0;i //根據file抽象路徑和dir路徑字符串創建一個新的file對象,路徑為文件的上一個目錄
file?=?new?File(filedirs[i]);
}
}
if(!file.exists()){
file.mkdirs();
}
file?=?new?File(filedirs[dirs.length-1]);
return?file;
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2351??2010-04-21?11:15??tools\CompresszZipFile.java
?????文件??????12850??2010-04-21?09:10??tools\Deflater.java
?????文件???????4702??2010-04-21?09:10??tools\DeflaterOutputStream.java
?????文件???????8084??2010-04-21?10:02??tools\InflaterInputStream.java
?????文件???????3156??2010-04-21?08:58??tools\ZipConstants.java
?????文件???????9349??2010-04-21?10:07??tools\ZipEntry.java
?????文件??????12115??2010-04-21?10:02??tools\ZipInputStream.java
?????文件??????15718??2010-04-21?09:09??tools\ZipOutputStream.java
?????目錄??????????0??2010-04-22?13:07??tools
-----------?---------??----------?-----??----
????????????????68325????????????????????9
評論
共有 條評論