ZIP i UNZIP kod

0

Witajcie
Szukałem ale nie znalazłem na forum tematu dotyczącego kodu pakowania do .zip. Być może dla niektórych to temat zbyt banalny, ale warto pamiętać że dla niektórych to kolejne drzwi do pokonania więc na pewno się przyda.

Poniżej zamieszczam fragment klasy pakowania i rozpakowywania (.zip) i tutaj moje pytanie. Czy jest jakiś sposób aby te operację przyspieszyć? W momencie gdy program musi spakować ok 1000 malutkich pliczków rozbitych po wielu katalogach, a następnie rozpakować zajmuje mu to sporo czasu. Z góry dziękuję za odpowiedź.

Kod ZIP

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;


public class a_ZIP
{
    private List fileList;
    private String OUTPUT_ZIP_FILE;
    private String SOURCE_FOLDER;

    public a_ZIP(String FOLDER_DO_ZIP, String FOLDER_Z_ZIP)
    {
        new a_ZAPIS_DO_DZIENNIKA("Uruchomiono a_ZIP", 0);

        this.SOURCE_FOLDER = FOLDER_DO_ZIP;
        this.OUTPUT_ZIP_FILE = FOLDER_Z_ZIP;

        fileList = new ArrayList();
        generateFileList(new File(SOURCE_FOLDER));
        zipIt(OUTPUT_ZIP_FILE);
    }

    private void zipIt(String zipFile)
    {
        byte[] buffer = new byte[1024];
        try{
            FileOutputStream fos = new FileOutputStream(zipFile);
            ZipOutputStream zos = new ZipOutputStream(fos);
            for(Object file : this.fileList){
                ZipEntry ze= new ZipEntry((String) file);
                zos.putNextEntry(ze);
                FileInputStream in =
                        new FileInputStream(SOURCE_FOLDER + File.separator + file);
                int len;
                while ((len = in.read(buffer)) > 0) {
                    zos.write(buffer, 0, len);
                }
                in.close();
            }
            zos.closeEntry();
            //remember close it
            zos.close();
        }catch(IOException ex){
            ex.printStackTrace();
        }
    }

    private void generateFileList(File node)
    {
        //add file only
        if(node.isFile()){
            fileList.add(generateZipEntry(node.getAbsoluteFile().toString()));
        }
        if(node.isDirectory()){
            String[] subNote = node.list();
            for(String filename : subNote){
                generateFileList(new File(node, filename));
            }
        }
    }

    private String generateZipEntry(String file)
    {
        return file.substring(SOURCE_FOLDER.length()+1, file.length());
    }
}

Kod UNZIP

 public UNZIP(String INPUT_ZIP_FILE, String OUTPUT_FOLDER, int rozmiar)
    {
        unZipIt(INPUT_ZIP_FILE, OUTPUT_FOLDER, rozmiar);
    }
    private void unZipIt(String zipFile, String outputFolder, int rozmiar){
        byte[] buffer = new byte[rozmiar + 1024];
        try{
            //create output directory is not exists
            File folder = new File(outputFolder);
            if(!folder.exists()){
                folder.mkdir();
            }
            //get the zip file content
            ZipInputStream zis =
                    new ZipInputStream(new FileInputStream(zipFile));
            //get the zipped file list entry
            ZipEntry ze = zis.getNextEntry();
            while(ze!=null){
                String fileName = ze.getName();
                File newFile = new File(outputFolder + File.separator + fileName);
                //create all non exists folders
                //else you will hit FileNotFoundException for compressed folder
                new File(newFile.getParent()).mkdirs();
                FileOutputStream fos = new FileOutputStream(newFile);
                int len;
                while ((len = zis.read(buffer)) > 0) {
                    fos.write(buffer, 0, len);
                }
                fos.close();
                ze = zis.getNextEntry();
            }
            zis.closeEntry();
            zis.close();
        }catch(IOException ex)
        {

        }
    }

0

nazwy zostały jeszcze z czasów jak zaczynałem pisać ... :) co do IO to robię to dlatego że gdyby się wykrzaczył podczas wykonywania funkcji to zgłosi tylko wyjątek, a nie wysypie cały program

0
Szymekbe napisał(a):

Szukałem ale nie znalazłem na forum tematu dotyczącego kodu pakowania do .zip.

Dlaczego ograniczasz się tylko do tego forum? Internet to skarbnica wiedzy.

https://www.baeldung.com/java-compress-and-uncompress

1 użytkowników online, w tym zalogowanych: 0, gości: 1