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