Blog para desarrollo de aplicaciones en Android, aprende paso a paso como crear aplicaciones.

Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación para mostrarle publicidad personalizada y realizar análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. OK Más información | Y más

Como hacer Zip o UnZip a un archivo en Android

Como hacer Zip o UnZip a un archivo en Android

Hola amigos vamos a aprender como hacer un Zip o UnZip a un archivo en Android así que comenzamos.
Como hacer Zip o UnZip a un archivo en Android



Como crear un Proyecto en Android Studio

Vamos a crear un proyecto en Android estudio para poder continuar con este ejemplo vamos a seguir el siguiente link. (Aquí).
Como hacer Zip o UnZip a un archivo en Android

Diseño de la aplicación para crear un Zip o UnZip en Android

Vamos a crear el diseño para nuestra aplicación de forma simple para que puedan entenderlo.

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <RelativeLayout
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:id="@+id/buttons"
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="false"
            android:layout_alignParentTop="true"
            android:baselineAligned="false">
            <Button
                android:id="@+id/btnZip"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="50"
                android:text="Zip"/>
            <Button
                android:id="@+id/btnUnzip"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="50"
                android:text="Unzip" />
        </LinearLayout>

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Incluir carpeta principal en archivo zip"
            android:id="@+id/chkParent"
            android:layout_below="@+id/buttons"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:checked="false" />
    </RelativeLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

El diseño nos quedaría de la siguiente forma.

Como hacer Zip o UnZip a un archivo en Android
y continuamos.

Código para crear un Zip o UnZip en Android

Vamos a continuar con el código para nuestra aplicación. Y de forma muy breve escribiremos el siguiente código.

Comenzaremos creando una clase la cual nombraremos como ArchivoHelper con esta realizaremos las acciones que deseamos Zip y UnZip.

Como hacer Zip o UnZip a un archivo en Android

Y el código es el siguiente.

import android.util.Log;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class ArchivoHelper {
    private static final int BUFFER_SIZE = 8192 ;//2048;
    private static String TAG= ArchivoHelper.class.getName().toString();
    private static String parentPath ="";

    public static boolean zip( String sourcePath, String destinationPath, String destinationFileName, Boolean includeParentFolder)  {
        new File(destinationPath ).mkdirs();
        FileOutputStream fileOutputStream ;
        ZipOutputStream zipOutputStream =  null;
        try{
            if (!destinationPath.endsWith("/")) destinationPath+="/";
            String destination = destinationPath + destinationFileName;
            File file = new File(destination);
            if (!file.exists()) file.createNewFile();

            fileOutputStream = new FileOutputStream(file);
            zipOutputStream =  new ZipOutputStream(new BufferedOutputStream(fileOutputStream));

            if (includeParentFolder)
                parentPath=new File(sourcePath).getParent() + "/";
            else
                parentPath=sourcePath;
            zipFile(zipOutputStream, sourcePath);

        }
        catch (IOException ioe){
            Log.d(TAG,ioe.getMessage());
            return false;
        }finally {
            if(zipOutputStream!=null)
                try {
                    zipOutputStream.close();
                } catch(IOException e) {

                }
        }
        return true;
    }

    private static void zipFile(ZipOutputStream zipOutputStream, String sourcePath) throws  IOException{
        java.io.File files = new java.io.File(sourcePath);
        java.io.File[] fileList = files.listFiles();

        String entryPath="";
        BufferedInputStream input;
        for (java.io.File file : fileList) {
            if (file.isDirectory()) {
                zipFile(zipOutputStream, file.getPath());
            } else {
                byte data[] = new byte[BUFFER_SIZE];
                FileInputStream fileInputStream = new FileInputStream(file.getPath());
                input = new BufferedInputStream(fileInputStream, BUFFER_SIZE);
                entryPath=file.getAbsolutePath().replace( parentPath,"");
                ZipEntry entry = new ZipEntry(entryPath);
                zipOutputStream.putNextEntry(entry);

                int count;
                while ((count = input.read(data, 0, BUFFER_SIZE)) != -1) {
                    zipOutputStream.write(data, 0, count);
                }
                input.close();
            }
        }
    }

    public static Boolean unzip(String sourceFile, String destinationFolder)  {
        ZipInputStream zis = null;

        try {
            zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(sourceFile)));
            ZipEntry ze;
            int count;
            byte[] buffer = new byte[BUFFER_SIZE];
            while ((ze = zis.getNextEntry()) != null) {
                String fileName = ze.getName();
                fileName = fileName.substring(fileName.indexOf("/") + 1);
                File file = new File(destinationFolder, fileName);
                File dir = ze.isDirectory() ? file : file.getParentFile();

                if (!dir.isDirectory() && !dir.mkdirs())
                    throw new FileNotFoundException("Invalid path: " + dir.getAbsolutePath());
                if (ze.isDirectory()) continue;
                FileOutputStream fout = new FileOutputStream(file);
                try {
                    while ((count = zis.read(buffer)) != -1)
                        fout.write(buffer, 0, count);
                } finally {
                    fout.close();
                }

            }
        } catch (IOException  ioe){
            Log.d(TAG,ioe.getMessage());
            return false;
        }  finally {
            if(zis!=null)
                try {
                    zis.close();
                } catch(IOException e) {

                }
        }
        return true;
    }

    public static  void saveToFile( String destinationPath, String data, String fileName){
        try {
            new File(destinationPath).mkdirs();
            File file = new File(destinationPath+ fileName);
            if (!file.exists()) {
                file.createNewFile();
            }
            FileOutputStream fileOutputStream = new FileOutputStream(file,true);
            fileOutputStream.write((data + System.getProperty("line.separator")).getBytes());

        }  catch(FileNotFoundException ex) {
            Log.d(TAG, ex.getMessage());
        }  catch(IOException ex) {
            Log.d(TAG, ex.getMessage());
        }
    }

}


Las funciones en este archivo se explican por sí mismas, pero me gusta explicar breve mente los parámetros para la función zip.

  • SourcePath: carpeta que desea comprimir / comprimir.
  • DestinationPath: ruta de ubicación donde se guarda el archivo zip.
  • DestinationFileName: nombre del archivo zip
  • IncludeParentFolder: es cierto, la carpeta superior se guardará en un archivo zip.
  • Falso, la carpeta principal ignorará solo los archivos de la carpeta superior que se comprimirán.

Y para terminar con esto agregaremos en el archivo MainActivity.

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment; 
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private String SDPath = Environment.getExternalStorageDirectory().getAbsolutePath();
    private String dataPath = SDPath + "/instinctcoder/zipunzip/data/" ;
    private String zipPath = SDPath + "/instinctcoder/zipunzip/zip/" ;
    private String unzipPath = SDPath + "/instinctcoder/zipunzip/unzip/" ;

    final static String TAG = MainActivity.class.getName();

    Button btnUnzip, btnZip;
    CheckBox chkParent;

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

        btnUnzip = (Button) findViewById(R.id.btnUnzip);
        btnUnzip.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (ArchivoHelper.unzip(zipPath + "dummy.zip",unzipPath)) {
                    Toast.makeText(MainActivity.this,"Unzip successfully.",Toast.LENGTH_LONG).show();
                }

            }
        });
        chkParent = (CheckBox) findViewById(R.id.chkParent);

        btnZip = (Button) findViewById(R.id.btnZip);
        btnZip.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (ArchivoHelper.zip(dataPath, zipPath, "dummy.zip", chkParent.isChecked())){
                    Toast.makeText(MainActivity.this,"Zip successfully.",Toast.LENGTH_LONG).show();
                }
            }
        });

        //Create dummy files
        ArchivoHelper.saveToFile(dataPath,"This is dummy data 01", "Dummy1.txt");
        ArchivoHelper.saveToFile(dataPath,"This is dummy data 02", "Dummy2.txt");
        ArchivoHelper.saveToFile(dataPath,"This is dummy data 03", "Dummy3.txt");
    }

}

y listo.

Como crear un emulador AVD en Android(Aquí)


 Y listo espero haya sido de su agrado. Recuerda suscribirte a nuestro canal de Youtube y seguirnos en Facebook. Gracias!

Descargar

Android Studio - Curso Español

Android Studio - Curso Español

No hay comentarios:

Publicar un comentario

x

Registrate!

Curso Android Español

Curso Kotlin Español

eBook Free Android Studio

Noticias y Eventos

¡Directamente a tu INBOX!

Le enviaremos nuestros recursos gratis. Para obtener nuestro contenido nuevo, únase a nuestra comunidad. No te molestaremos enviando información inútil. ¡No te pierdas ninguna actualización, mantente conectado! Recuerda verificar tu correo electronico.

Ingrese su dirección de correo electrónico:

Entregado por FeedBurner