آموزش unzip کردن فایل zip در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش های برنامه نویسی اندروید به آموزش unzip کردن فایل zip در برنامه نویسی اندروید می پردازیم این پست خیلی کاربردی است به طور مثال شما بعضی مواقع نیاز دارید تا یک فایل zip را از اینترنت دانلود کنید توی فایل zip هم به طورمثال اطلاعات مهمی هست که برای اپلیکیشن مهم است و در برنامه استفاده میشه شما بعد از دانلود فایل zip باید آن را Extract (استخراج) کنید سپس از داده های آن استفاده کنید در ادامه با ما همراه باشید.
ما کلاس اصلی را کمی دستکاری کردیم تا به بالاترین راندومان استخراج برسیم
یک کلاس به نام Decompress ایجاد کنید و کد زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | package ir.programchi; import android.util.Log; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class Decompress { private String _zipFile; private String _location; public Decompress(String zipFile, String location) { _zipFile = zipFile; _location = location; _dirChecker(""); } public void unzip() { try { FileInputStream fin = new FileInputStream(_zipFile); ZipInputStream zin = new ZipInputStream(fin); ZipEntry ze = null; while ((ze = zin.getNextEntry()) != null) { Log.v("Decompress", "Unzipping " + ze.getName()); if(ze.isDirectory()) { _dirChecker(ze.getName()); } else { FileOutputStream fout = new FileOutputStream(_location + ze.getName()); for (int c = zin.read(); c != -1; c = zin.read()) { fout.write(c); } zin.closeEntry(); fout.close(); } } zin.close(); } catch(Exception e) { Log.e("Decompress", "unzip", e); } } private void _dirChecker(String dir) { File f = new File(_location + dir); if(!f.isDirectory()) { f.mkdirs(); } } } |
این شامل یک void است که مسیر را بررسی می کند (dirchecker) علت بررسی این است که در صورتی که مسیر اشتباه بود برنامه crash ندهد.کاری که این کلاس انجام می دهد ابتدا با استفاده از File inputstream فایل را byte به بایت می خواند سپس توسط کلاس zipEntry آن را استخرج می کند.
نحوه استفاده از آن هم در اکتیویتی که می خواهید فایل را استخراج کنید از متود زیر استفاده کنید.
1 2 3 4 5 6 7 8 9 10 11 | if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ Log.d("MyApp", "No SDCARD"); } else { File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "Programchi"); directory.mkdirs(); } String zipFile = Environment.getExternalStorageDirectory() + "/Programchi/programchi.zip"; String unzipLocation = Environment.getExternalStorageDirectory() + "/Programchi/"; Decompress d = new Decompress(zipFile, unzipLocation); d.unzip(); |
در بالا ما یکسری کد های اضافی قرار داده ایم به طور مثال خط اول بررسی می کند که آیا حافظه در دسترس است یا خیر اگر در دسترس باشد (یعنی وارد else می شود) و یک فولدر به نام Programchi می سازد بعد از آن ما باید مسیر فایل zip را داشته باشیم و متغیر zipFile مسیر اصلی که فایل zip در آن قرار دارد را به دست می آورد و unziplocation مسیری است که فایل در آن استخراج می شود و برای اینکه فایل استخراج شود از Decompress همان کلاسی که درست کردیم استفاده می کنیم و دو مقدار ورودی دارد یک مسیر فایل ما و دومی مسیری که فایل می خواهد استخراج شود.
این آموزش هم به پایان رسید.
موفق باشید.
یا سلام و تشکر از آموزشتون ایا با این کد میشه قایل های rar رو هم باز کرد؟
اگه بخوایم یه فایل zip رو از پوشه assets توی sd اکسترکت کنیم باید چکار کنیم؟؟؟
سلام می توانید مثل زیر عمل کنید.
موفق باشید.
سلام من خیلی ممنونم که به این دوست جواب دادین من برای این یه قطعه کد چون سواد برنامه نویسیم کمه کل سایتا رو شخم زدم
سلام و درود
خواهش می کنم
موفق باشید.
با سلام استاد من یه مشکل دارم من کلاس Decompress رو ساختم و یه دکمه تو main.xml دارم و یه فایل test.zip در مسیر assets دارم که می خوام کاربر پس از زدن دکمه فایل در روت اینترنال استورج اکسترکت بشه آی دی دکمه هم btn1 هستش و دکمرو تو MainActivity.java تعریف کردم حالا می خوام بفهم با چه کدی میشه گف که پس از زدن این دکمه عملیاتی که گفتم اجرا بشع
من اینو امتحان کردم ولی ارور زیاد داره
سلام و درود
بفرمایید چی خطا میده راهنمایی کنیم.
اگه میشه یه مین اکتیویتی با کد های on click listener باتن بدین همراه با کدهای import که کاملا متوجه بشم
با سلام و احترام. اگه بخواهیم یه فایل zip رو از پوشه raw داخل sdcard اکسترکت کنیم باید به چه نحوی عمل کنیم؟ ممنون میشم با کد پاسخ بدین.
سلام و درود از کد زیر می توانید استفاده کنید.
موفق باشید.
با سلام من از کدی که تو اموزش قرار دادین استفاده می کنم (کلاس دکامپرس+متدی که در متن گفتین)
کد ها کاملا درست اجرا میشن ولی چون در بکگراند اجرا نمیشن برنامه تا اتمام فرایند فریز میشه و بعضا هنگ می کنه و فرایند نا تموم می مونه می خواستم کلاس دکامپرس رو بگین چطوری تغییر بدم که asynctask یا doinbackground بشه تا برنامه فریز نشه و یه پروگرس دیالوگ نمایش داده بشه
سلام ممنون میشم جوابمو زود بدین چون واقعا مغزم درگیر این هستش و کل اینترنتو شخم زدم چیزی دست گیرم نشد
سلام و درود از کد زیر استفاده کنید
نحوه استفاده از کد
موفق باشید.
ممنون
سلام اگه بخوایم فایل zip رو از assets به حافظه داخلی استخراج کنه و هنگام استخراج یک پروگرس دیالوگ نمایش بده باید چه کدی رو بزنیم ؟
پروگرس دیالوگ رو تو یک activity جدا به نام
AsyncCopy.java دارم ولی میخوام بدونم چطور باید به فرایند استخراج متصلش کنم .
واقعا ممنون میشم راهنمایی کنید و کد کامل activity رو بدید چون من تازه کارم و زیاد محل قرار گیری کد ها رو نمیدونم .
?
سلام.چجوری میتونم یک فایل زیپ که حاوی تعدادی عکس و فیلم هست رو توی برنامه بزارم و وقتی کاربر نصب کرد بتونم ازش استفاده کنم؟