Android 不解壓直接讀取zip包的方法
之前項(xiàng)目中遇到個(gè)需求,總監(jiān)讓我們把從服務(wù)器下載下來的資源不解壓直接讀取里面的資源,這樣的話就省去了一個(gè)個(gè)校驗(yàn)資源是否正確的步驟,聽著貌似有點(diǎn)道理。。。廢話不多說直接上代碼。
目前我所試驗(yàn)過的可以讀取的資源有文本、圖片、xml文件。
文本:
zip包目錄結(jié)構(gòu):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 ""; }
上面方法比較簡單沒什么好說的,大家理解就行,有點(diǎn)需要注意的就是在判斷是否是想要讀取的文件的時(shí)候,這里的路徑是以zip的壓縮目錄為根目錄做比較。也就是if (ze.getName().equals(fileName + "/txt/data.json")) 這句話中的fileName 當(dāng)前值為res。最后返回讀取的內(nèi)容String就完事了。
圖片和xml文件的讀取都差不多,下面直接貼出代碼了。
圖片:
zip包目錄結(jié)構(gòu):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包目錄結(jié)構(gòu):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包的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Android中手勢交互的實(shí)現(xiàn)方法
本篇文章是對Android中手勢交互的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05Kotlin自定義實(shí)現(xiàn)支付密碼數(shù)字鍵盤的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Kotlin如何自定義實(shí)現(xiàn)支付密碼數(shù)字鍵盤的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07Android自定義View中Paint、Rect、Canvas介紹(一)
這篇文章主要為大家詳細(xì)介紹了Android自定義View中Paint、Rect、Canvas的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Android實(shí)現(xiàn)底部導(dǎo)航欄功能(選項(xiàng)卡)
這篇文章主要介紹了Android實(shí)現(xiàn)底部導(dǎo)航欄功能,可以隨意切換不同的頁面,實(shí)現(xiàn)選項(xiàng)卡功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12Android項(xiàng)目實(shí)戰(zhàn)(二十八):使用Zxing實(shí)現(xiàn)二維碼及優(yōu)化實(shí)例
這篇文章主要介紹了Android項(xiàng)目實(shí)戰(zhàn)(二十八):使用Zxing實(shí)現(xiàn)二維碼及優(yōu)化實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11Flutter控件之實(shí)現(xiàn)Widget基類的封裝
在實(shí)際的開發(fā)中,Widget的基類還是很有必要存在的,不然就會(huì)存在很多的冗余嵌套代碼,本文為大家介紹了Flutter中基類是如何封裝的,需要的可以收藏一下2023-05-05解決Fedora14下eclipse進(jìn)行android開發(fā),ibus提示沒有輸入窗口的方法詳解
本篇文章是對Fedora14下eclipse進(jìn)行android開發(fā),ibus提示沒有輸入窗口的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05