PDA

View Full Version : سوال: وارد کردن یک پوشه به داخل فایل زیپ در اندروید



wizard10
دوشنبه 15 خرداد 1396, 02:18 صبح
با سلام خدمت تمامی اساتید سایت برنامه نویس


من یک برنامه دارم با اکلیپس نوشتم

میخوام در برنامه پوشه ای از حافظه داخلی گوشی رو به داخل فایل زیپ بندازم

یعنی اول برنامه فایل زیپ رو بسازه بعدش آدرس پوشه رو که به برنامه دادیم داخل اون فایل زیپی که داریم کپی کنه


خیلی توی نت گشتم فقط کار با فایل های در حافظه خارجی هستش ولی من حافظه داخلی میخوام


کد هاشو نمیدونم ممنونم میشم راهنمایی کنید

vahid-p
دوشنبه 15 خرداد 1396, 05:30 صبح
هر چند این سوال رو باید در انجمن اندروید (http://barnamenevis.org/forumdisplay.php?187-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-Android) مطرح کنید، اما از اونجایی که اندروید برای اینکار از کلاس های مشابه جاوا استاندارد استفاده میکنه.

کدهای زیر رو تست نکردم فقط با توجه به مستندات نوشتم، در نتیجه ممکنه جواب نده یا بهترین روش نباشه.

int size;
byte[] buffer = new byte[64 * 1024];


try (BufferedInputStream input = new BufferedInputStream(new FileInputStream("input.txt"));
ZipOutputStream output = new ZipOutputStream(new FileOutputStream("yourzipfile.zip"))) {
output.putNextEntry(new ZipEntry("newFile.txt"));
while ((size = input.read(buffer)) != -1) {
output.write(buffer, 0, size - 1);
}
output.flush();
output.closeEntry();
} catch (FileNotFoundException ex) {
//File Not Found
} catch (IOException ex) {
//IOException
}


نکته دیگه من بر اساس پیاده سازی جاوا استاندارد نوشتم، در صورتی که اندروید پیاده سازی خودشو داره. به عنوان مثال در مستندات اندروید اومده:

if a security manager exists and its checkRead method doesn't allow read access to the file.
که با پیاده سازی جاوا متفاوته و در چنین حالتی SecurityException میده که میتونید catch کنید. نباید زیاد تفاوت داشته باشه، بهتره کد رو تست کنید.
در کل نمیدونم در اندروید فایل جدید میسازه یا به فایل قبلی اضافه میکنه.

اما شما گفتید مشکلتون کار با حافظه داخلی هست. بحثی که وجود داره و واقعا برای خودمم گنگ بود، اینکه حافظه داخلی که ما میگیم /storage/sdcard0 در اصل شبیه سازی حافظه خارجی روی حافظه داخلی است. برای همین فکر کنم اگر از Storage.getExternalVolumes استفاده کنید بتونید لیستش رو ببینید. چون فکر کنم باز بین گوشی واقعی و شبیه ساز کامپیوتر تو مسیر فایل تفاوت وجود داره.
اما روی گوشی واقعی طبق سرچی که زدم آدرس هایی که ما به عنوان حافظه داخلی میدونیم :

برای اندروید نسخه کمتر از 4: /mnt/sdcard
برای نسخه های 4 و بالاتر: /storage/sdcard0

البته ممکنه اینا دقیق نباشه. دو تابعی که برای اینکار استفاده میشن:

Environment.getExternalStoragePublicDirectory() که باید نوع فولدر رو مشخص کنید (مثل دانلود و...)
Environment.getExternalStorageDirectory()

با هر دوش میشه مسیر رو بدست آورد. حتما قبلش مستنداتش رو بخونید چون توضیحاتی داره.