آموزش برنامه نویسی اندروید (Android)
۴۱۹ آموزش
نمایش دسته بندی ها (۴۱۹ آموزش)

از حالت فشرده در آوردن (unzip کردن) یک فایل فشرده (فایل zip شده) موجود در حافظه خارجی (External Storage)، در برنامه نویسی اندروید

فرض کنید که در حافظه خارجی (External Storage)، یک پوشه (Folder) با نام myFolder داریم که در آن، یک فایل فشرده با نام kelidestan.zip قرار دارد. اکنون قصد داریم که این فایل را از حالت فشرده در بیاوریم. برای این منظور، کدهای زیر را اجرا می کنیم :


File root = android.os.Environment.getExternalStorageDirectory();
String directory_string = root.getAbsolutePath() + "/myFolder/";
String zipName = "kelidestan.zip";
unpackZip(directory_string, zipName);

در کدهای بالا، از تابعی با نام unpackZip استفاده شده که آن را خودمان با کدهای زیر تعریف می کنیم :


private boolean unpackZip(String path, String zipname){      
         InputStream is;
         ZipInputStream zis;
         try
         {
                 String filename;
                 is = new FileInputStream(path + zipname);
                 zis = new ZipInputStream(new BufferedInputStream(is));          
                 ZipEntry ze;
                 byte[] buffer = new byte[1024];
                 int count;

                 while ((ze = zis.getNextEntry()) != null)
                 {
                         // zapis do souboru
                         filename = ze.getName();

                         // Need to create directories if not exists, or
                         // it will generate an Exception...
                         if (ze.isDirectory()) {
                                File fmd = new File(path + filename);
                                fmd.mkdirs();
                                continue;
                         }

                         FileOutputStream fout = new FileOutputStream(path + filename);

                         // cteni zipu a zapis
                         while ((count = zis.read(buffer)) != -1)
                         {
                                 fout.write(buffer, 0, count);            
                         }

                         fout.close();              
                         zis.closeEntry();
                 }

                 zis.close();
         }
         catch(IOException e)
         {
                 e.printStackTrace();
                 return false;
         }

        return true;
}

یعنی به عنوان مثال، کل کدهای Activity می تواند به صورت زیر باشد (یک Activity دلخواه) :


package com.kelidestan.com;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                File root = android.os.Environment.getExternalStorageDirectory();
                String directory_string = root.getAbsolutePath() + "/myFolder/";
                String zipName = "kelidestan.zip";
                unpackZip(directory_string, zipName);
               
        }
       
       
        private boolean unpackZip(String path, String zipname){      
             InputStream is;
             ZipInputStream zis;
             try
             {
                 String filename;
                 is = new FileInputStream(path + zipname);
                 zis = new ZipInputStream(new BufferedInputStream(is));          
                 ZipEntry ze;
                 byte[] buffer = new byte[1024];
                 int count;

                 while ((ze = zis.getNextEntry()) != null)
                 {
                     // zapis do souboru
                     filename = ze.getName();

                     // Need to create directories if not exists, or
                     // it will generate an Exception...
                     if (ze.isDirectory()) {
                        File fmd = new File(path + filename);
                        fmd.mkdirs();
                        continue;
                     }

                     FileOutputStream fout = new FileOutputStream(path + filename);

                     // cteni zipu a zapis
                     while ((count = zis.read(buffer)) != -1)
                     {
                         fout.write(buffer, 0, count);            
                     }

                     fout.close();              
                     zis.closeEntry();
                 }

                 zis.close();
             }
             catch(IOException e)
             {
                 e.printStackTrace();
                 return false;
             }

            return true;
        }
       

}
نکته

معمولا در کامپیوتر، وقتی یک فایل zip شده را unzip می کنیم، پوشه ای دقیقا هم نام با آن فایل zip می سازد و فایل ها درون آن قرار می گیرند، ولی کد بالا، چنین پوشه ای را نمی سازد.

نکته

دقت شود که در صورت کدنویسی برای فرآیندی که نیاز به دسترسی به حافظه خارجی (External Storage) دارد، باید کدهای زیر درون AndroidManifest.xml نوشته شود (برای اجازه دادن برای نوشتن در حافظه خارجی و یا خواندن از حافظه خارجی) :


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
نویسنده علیرضا گلمکانی
شماره کلید 2952
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 2 2 0
حسین
۱۳۹۶/۱۱/۲۹
۱۲:۰۳

سلام
اگر بخایم پسورد فایل رو هم در سورس قرار بدیم کجا باید نوشت؟

OMID
۱۳۹۹/۰۷/۲۱
۰۲:۵۷

لطفا به این سوال جواب بدید.

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)