lunes, 27 de abril de 2020

PDF con IText (3). Comprimir ficheros con ZIP y protegidos con contraseña

0. Introducción
Aunque esto no tiene nada que ver con IText o PDF, se ha metido en esta entrada ya que se quiere agrupar en un fichero ZIP protegido los ficheros de la misma persona.

En este caso, se recorren todos los ficheros de una carpeta y los que sean de la misma persona (que tengan la misma parte inicial en el nombre del fichero, serán comprimidos en el mismo ZIP.

La contraseña del ZIP está incuida en el nombre del fichero a modo de ejemplo, cosa que no es recomendable.

Se ha utilizado la libreria Zip4j

El proceso consiste en crear un Zip con contraseña y luego se le añade una lista de ficheros.

Los imports son:


import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.EncryptionMethod;

Este es el código que los comprime. para ello busca los ficheros de la misma persona y los mete en el zip


protected static void zipSimilarFiles() throws ZipException {
 ZipParameters zipParameters = new ZipParameters();
 zipParameters.setEncryptFiles(true);
 zipParameters.setEncryptionMethod(EncryptionMethod.AES);
  
 String lastName="KK";
 List<File>commonFiles=new ArrayList<>();
 for(File file: getOrderedFileByName(new File(DEST_FOLDER))){
  String fileName=file.getName();
  if (fileName.substring(0, fileName.lastIndexOf("_")).equalsIgnoreCase(lastName)) {
   commonFiles.add(file);
  } else {
   if (lastName.length()>5) {
    //1. Create last zip file
    String[] parts=lastName.split("_");
    String password=parts[3];
    ZipFile zipFile = new ZipFile(DEST_FOLDER+"/"+lastName+".zip", password.toCharArray());
    zipFile.createSplitZipFile(commonFiles, zipParameters, true, 10485760); // using Split size of 10MB in this example
   } 
   //2.Update lastName
   lastName=fileName.substring(0, fileName.lastIndexOf("_"));
   commonFiles=new ArrayList<>();
   commonFiles.add(file);
  }
 }
 if (lastName.length()>5) {
  String[] parts=lastName.split("_");
  String password=parts[3];
  ZipFile zipFile = new ZipFile(SOURCE_FOLDER+"/"+lastName+".zip", password.toCharArray());
  zipFile.createSplitZipFile(commonFiles, zipParameters, true, 10485760); // using Split size of 10MB in this example
 }
  
}


No hay comentarios :

Publicar un comentario