Android 不解壓直接讀取zip包的方法

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

之前專案中遇到個需求,總監讓我們把從伺服器下載下來的資源不解壓直接讀取裡面的資源,這樣的話就省去了一個個校驗資源是否正確的步驟,聽著貌似有點道理。。。廢話不多說直接上程式碼。

目前我所試驗過的可以讀取的資源有文字、圖片、xml檔案。

文字:

zip包目錄結構:res/txt/data.json

檔案sd卡路徑:android.os.Environment.getExternalStorageDirectory() “/res.zip”


public static String readDataFile(String file) throws Exception {
//擷取路徑的檔名 res
String fileName = file.substring(file.length() - 9, file.length() - 4);
ZipFile zf = new ZipFile(file);
InputStream in = new BufferedInputStream(new FileInputStream(file));
ZipInputStream zin = new ZipInputStream(in);
ZipEntry ze;
while ((ze = zin.getNextEntry()) != null) {
if (ze.isDirectory()) {
//Do nothing
} else {
if (ze.getName().equals(fileName   "/txt/data.json")) {
BufferedReader br = new BufferedReader(
new InputStreamReader(zf.getInputStream(ze)));
String line;
while ((line = br.readLine()) != null) {
return line;
}
br.close();
}
}
}
zin.closeEntry();
return "";
}

上面方法比較簡單沒什麼好說的,大家理解就行,有點需要注意的就是在判斷是否是想要讀取的檔案的時候,這裡的路徑是以zip的壓縮目錄為根目錄做比較。也就是if (ze.getName().equals(fileName “/txt/data.json”)) 這句話中的fileName 當前值為res。最後返回讀取的內容String就完事了。

圖片和xml檔案的讀取都差不多,下面直接貼出程式碼了。

圖片:

zip包目錄結構:res/pic/haha.png

檔案sd卡路徑:android.os.Environment.getExternalStorageDirectory() “/res.zip”


public static Bitmap readGuidePic(String file, String ResId) throws Exception {
String fileName = file.substring(file.length() - 9, file.length() - 4);
ZipFile zf = new ZipFile(file);
InputStream in = new BufferedInputStream(new FileInputStream(file));
ZipInputStream zin = new ZipInputStream(in);
ZipEntry ze;
while ((ze = zin.getNextEntry()) != null) {
if (ze.isDirectory()) {
//Do nothing
} else {
Log.i("tag", "file - "   ze.getName()   " : "   ze.getSize()   " bytes");
if (ze.getName().equals(fileName   "/pic/haha.png")) {
InputStream is = zf.getInputStream(ze);
Bitmap bitmap = BitmapFactory.decodeStream(is);
return bitmap;
}
}
}
zin.closeEntry();
return null;
}

xml檔案:

zip包目錄結構:res/xml/app.xml

檔案sd卡路徑:android.os.Environment.getExternalStorageDirectory() “/res.zip”


public static InputStream readAppFile(String file) throws IOException {
String fileName = file.substring(file.length() - 9, file.length() - 4);
ZipFile zf = new ZipFile(file);
InputStream in = new BufferedInputStream(new FileInputStream(file));
ZipInputStream zin = new ZipInputStream(in);
ZipEntry ze;
while ((ze = zin.getNextEntry()) != null) {
if (ze.isDirectory()) {
//Do nothing
} else {
if (ze.getName().equals(fileName   "/xml/app.xml")) {
InputStream inputStream = zf.getInputStream(ze);
return inputStream;
}
}
}
zin.closeEntry();
return null;
}

以上這篇Android 不解壓直接讀取zip包的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援指令碼之家。

您可能感興趣的文章:

Android實現zip檔案壓縮及解壓縮的方法

相關文章

Android 開發 最新文章