版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android中怎么實(shí)現(xiàn)一個(gè)Zip解壓縮工具類
Android中怎么實(shí)現(xiàn)一個(gè)Zip解壓縮工具類,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面在下將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。具體內(nèi)容如下package
mons.utils;
import
android.util.Log;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileOutputStream;
import
java.io.InputStream;
import
java.util.ArrayList;
import
java.util.List;
import
java.util.zip.ZipEntry;
import
java.util.zip.ZipFile;
import
java.util.zip.ZipInputStream;
import
java.util.zip.ZipOutputStream;
/**
*
@author:
lijuan
*
@description:
解壓ZIP文件
*
@date:
2017-04-11
*
@time:
09:22
*/
public
class
ZipUtils
{
public
static
final
String
TAG="ZIP";
public
ZipUtils(){
}
/**
*
解壓zip到指定的路徑
*
@param
zipFileString
ZIP的名稱
*
@param
outPathString
要解壓縮路徑
*
@throws
Exception
*/
public
static
void
UnZipFolder(String
zipFileString,
String
outPathString)
throws
Exception
{
ZipInputStream
inZip
=
new
ZipInputStream(new
FileInputStream(zipFileString));
ZipEntry
zipEntry;
String
szName
=
"";
while
((zipEntry
=
inZip.getNextEntry())
!=
null)
{
szName
=
zipEntry.getName();
if
(zipEntry.isDirectory())
{
//獲取部件的文件夾名
szName
=
szName.substring(0,
szName.length()
-
1);
File
folder
=
new
File(outPathString
+
File.separator
+
szName);
folder.mkdirs();
}
else
{
Log.e(TAG,outPathString
+
File.separator
+
szName);
File
file
=
new
File(outPathString
+
File.separator
+
szName);
if
(!file.exists()){
Log.e(TAG,
"Create
the
file:"
+
outPathString
+
File.separator
+
szName);
file.getParentFile().mkdirs();
file.createNewFile();
}
//
獲取文件的輸出流
FileOutputStream
out
=
new
FileOutputStream(file);
int
len;
byte[]
buffer
=
new
byte[1024];
//
讀?。ㄗ止?jié))字節(jié)到緩沖區(qū)
while
((len
=
inZip.read(buffer))
!=
-1)
{
//
從緩沖區(qū)(0)位置寫(xiě)入(字節(jié))字節(jié)
out.write(buffer,
0,
len);
out.flush();
}
out.close();
}
}
inZip.close();
}
public
static
void
UnZipFolder(String
zipFileString,
String
outPathString,String
szName)
throws
Exception
{
ZipInputStream
inZip
=
new
ZipInputStream(new
FileInputStream(zipFileString));
ZipEntry
zipEntry;
while
((zipEntry
=
inZip.getNextEntry())
!=
null)
{
//szName
=
zipEntry.getName();
if
(zipEntry.isDirectory())
{
//獲取部件的文件夾名
szName
=
szName.substring(0,
szName.length()
-
1);
File
folder
=
new
File(outPathString
+
File.separator
+
szName);
folder.mkdirs();
}
else
{
Log.e(TAG,outPathString
+
File.separator
+
szName);
File
file
=
new
File(outPathString
+
File.separator
+
szName);
if
(!file.exists()){
Log.e(TAG,
"Create
the
file:"
+
outPathString
+
File.separator
+
szName);
file.getParentFile().mkdirs();
file.createNewFile();
}
//
獲取文件的輸出流
FileOutputStream
out
=
new
FileOutputStream(file);
int
len;
byte[]
buffer
=
new
byte[1024];
//
讀?。ㄗ止?jié))字節(jié)到緩沖區(qū)
while
((len
=
inZip.read(buffer))
!=
-1)
{
//
從緩沖區(qū)(0)位置寫(xiě)入(字節(jié))字節(jié)
out.write(buffer,
0,
len);
out.flush();
}
out.close();
}
}
inZip.close();
}
/**
*
壓縮文件和文件夾
*
@param
srcFileString
要壓縮的文件或文件夾
*
@param
zipFileString
解壓完成的Zip路徑
*
@throws
Exception
*/
public
static
void
ZipFolder(String
srcFileString,
String
zipFileString)throws
Exception
{
//創(chuàng)建ZIP
ZipOutputStream
outZip
=
new
ZipOutputStream(new
FileOutputStream(zipFileString));
//創(chuàng)建文件
File
file
=
new
File(srcFileString);
//壓縮
ZipFiles(file.getParent()+File.separator,
file.getName(),
outZip);
//完成和關(guān)閉
outZip.finish();
outZip.close();
}
/**
*
壓縮文件
*
@param
folderString
*
@param
fileString
*
@param
zipOutputSteam
*
@throws
Exception
*/
private
static
void
ZipFiles(String
folderString,
String
fileString,
ZipOutputStream
zipOutputSteam)throws
Exception{
if(zipOutputSteam
==
null)
return;
File
file
=
new
File(folderString+fileString);
if
(file.isFile())
{
ZipEntry
zipEntry
=
new
ZipEntry(fileString);
FileInputStream
inputStream
=
new
FileInputStream(file);
zipOutputSteam.putNextEntry(zipEntry);
int
len;
byte[]
buffer
=
new
byte[4096];
while((len=inputStream.read(buffer))
!=
-1)
{
zipOutputSteam.write(buffer,
0,
len);
}
zipOutputSteam.closeEntry();
}
else
{
//文件夾
String
fileList[]
=
file.list();
//沒(méi)有子文件和壓縮
if
(fileList.length
<=
0)
{
ZipEntry
zipEntry
=
new
ZipEntry(fileString+File.separator);
zipOutputSteam.putNextEntry(zipEntry);
zipOutputSteam.closeEntry();
}
//子文件和遞歸
for
(int
i
=
0;
i
<
fileList.length;
i++)
{
ZipFiles(folderString,
fileString+
File.separator+fileList[i],
zipOutputSteam);
}
}
}
/**
*
返回zip的文件輸入流
*
@param
zipFileString
zip的名稱
*
@param
fileString
ZIP的文件名
*
@return
InputStream
*
@throws
Exception
*/
public
static
InputStream
UpZip(String
zipFileString,
String
fileString)throws
Exception
{
ZipFile
zipFile
=
new
ZipFile(zipFileString);
ZipEntry
zipEntry
=
zipFile.getEntry(fileString);
return
zipFile.getInputStream(zipEntry);
}
/**
*
返回ZIP中的文件列表(文件和文件夾)
*
@param
zipFileString
ZIP的名稱
*
@param
bContainFolder
是否包含文件夾
*
@param
bContainFile
是否包含文件
*
@return
*
@throws
Exception
*/
public
static
List<File>
GetFileList(String
zipFileString,
boolean
bContainFolder,
boolean
bContainFile)throws
Exception
{
List<File>
fileList
=
new
ArrayList<File>();
ZipInputStream
inZip
=
new
ZipInputStream(new
FileInputStream(zipFileString));
ZipEntry
zipEntry;
String
szName
=
"";
while
((zipEntry
=
inZip.getNextEntry())
!=
null)
{
szName
=
zipEntry.getName();
if
(zipEntry.isDirectory())
{
//
獲取部件的文件夾名
szName
=
szName.substring(0,
szName.length()
-
1);
File
folder
=
new
File(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年臨時(shí)倉(cāng)儲(chǔ)設(shè)施租賃及管理服務(wù)合同
- 標(biāo)準(zhǔn)新工程設(shè)計(jì)合同樣本
- 2024年多人合伙共盈合同書(shū)范本
- 2024年度智能倉(cāng)庫(kù)設(shè)備安裝合同
- 代銷協(xié)議書(shū)范例2024
- 全面房屋裝修合同模板集成
- 出口業(yè)務(wù)代理協(xié)議范本
- 2024物流合同范本
- 常見(jiàn)勞務(wù)派遣委托協(xié)議樣本
- 廣州建設(shè)工程裝修施工合同范例
- 雅魯藏布江大拐彎巨型水電站規(guī)劃方案
- 廣西基本醫(yī)療保險(xiǎn)門(mén)診特殊慢性病申報(bào)表
- 城市經(jīng)濟(jì)學(xué)習(xí)題與答案
- 國(guó)開(kāi)成本會(huì)計(jì)第14章綜合練習(xí)試題及答案
- 幼兒園大班科學(xué):《樹(shù)葉為什么會(huì)變黃》課件
- 1到50帶圈數(shù)字直接復(fù)制
- 鐵路工程施工組織設(shè)計(jì)(施工方案)編制分類
- 幼兒園中班數(shù)學(xué)《有趣的圖形》課件
- 《規(guī)劃每一天》教案2021
- 草莓創(chuàng)意主題實(shí)用框架模板ppt
- 山大口腔頜面外科學(xué)課件第5章 口腔種植外科-1概論、口腔種植的生物學(xué)基礎(chǔ)
評(píng)論
0/150
提交評(píng)論