Java Zip File Folder Exempel

By rik

Inledning

Java erbjuder en omfattande samling av klasser och metoder för att hantera komprimerade filer i ZIP-format. Oavsett om du vill skapa, packa upp eller manipulera innehållet i ZIP-arkiv, har Java de nödvändiga verktygen.

ZIP-formatet är en förlustfri komprimeringsmetod som används för att minska storleken på filer och mappar. Det är ett etablerat och allmänt använt format som stöds av de flesta operativsystem och applikationer.

Skapa ZIP-arkiv

Paketet java.util.zip innehåller klassen ZipOutputStream, som du kan använda för att skapa ZIP-arkiv. Här följer ett exempel som illustrerar hur man skapar ett ZIP-arkiv innehållande en textfil:

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

public class ZipFileCreator {
    public static void main(String[] args) {
        String originalFil = "test.txt";
        String zipFil = "test.zip";

        try (FileInputStream fis = new FileInputStream(originalFil);
             FileOutputStream fos = new FileOutputStream(zipFil);
             ZipOutputStream zos = new ZipOutputStream(fos)) {

            // Skapa en ZipEntry för textfilen
            ZipEntry zipEntry = new ZipEntry(originalFil);

            // Lägg till ZipEntry till ZIP-arkivet
            zos.putNextEntry(zipEntry);

            // Skriv filinnehållet till ZIP-arkivet
            byte[] buffert = new byte[1024];
            int längd;
            while ((längd = fis.read(buffert)) > 0) {
                zos.write(buffert, 0, längd);
            }

            // Stäng aktuell ZipEntry
            zos.closeEntry();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Extrahera ZIP-filer

För att extrahera filer från ZIP-arkiv, kan du använda klassen ZipInputStream, som också finns i java.util.zip-paketet. Nedan visas ett exempel på hur man extraherar alla filer från ett ZIP-arkiv:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class ZipFileExtractor {
    public static void main(String[] args) {
        String zipFil = "test.zip";
        String utdataKatalog = "extraherade_filer";

        try (ZipFile zip = new ZipFile(zipFil)) {
            Enumeration<? extends ZipEntry> entries = zip.entries();

            while (entries.hasMoreElements()) {
                ZipEntry entry = entries.nextElement();
                String entryNamn = entry.getName();

                // Skapa en fil för filen i ZIP-arkivet
                File fil = new File(utdataKatalog, entryNamn);

                // Hämta dataströmmen från ZIP-entryn
                try (FileOutputStream fos = new FileOutputStream(fil)) {
                    byte[] buffert = new byte[1024];
                    int längd;
                    while ((längd = zip.getInputStream(entry).read(buffert)) > 0) {
                        fos.write(buffert, 0, längd);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Arbeta med ZIP-entryer

Varje fil eller mapp inuti ett ZIP-arkiv representeras som en ZIP-entry. Genom att använda klassen ZipEntry kan man hämta information som namn, storlek och komprimeringsmetod.

Lista ZIP-entryer

Metoden ZipFile.entries() används för att hämta en samling av alla ZIP-entryer i ett ZIP-arkiv. Följande kod illustrerar hur man listar dessa entryer:

import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class ZipEntryLister {
    public static void main(String[] args) {
        String zipFil = "test.zip";

        try (ZipFile zip = new ZipFile(zipFil)) {
            Enumeration<? extends ZipEntry> entries = zip.entries();

            while (entries.hasMoreElements()) {
                ZipEntry entry = entries.nextElement();

                System.out.println(entry.getName());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Hämta ZIP-metadata

För att få detaljerad information om en ZIP-entry, kan du använda metoderna ZipEntry.getName(), ZipEntry.getSize() och ZipEntry.getMethod(). Detta exempel visar hur man extraherar namn, storlek och komprimeringsmetod för en specifik ZIP-entry:

import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class ZipEntryMetadataRetriever {
    public static void main(String[] args) {
        String zipFil = "test.zip";
        String entryNamn = "test.txt";

        try (ZipFile zip = new ZipFile(zipFil)) {
            ZipEntry entry = zip.getEntry(entryNamn);

            System.out.println("Namn: " + entry.getName());
            System.out.println("Storlek: " + entry.getSize());
            System.out.println("Komprimeringsmetod: " + entry.getMethod());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Sammanfattning

Java tillhandahåller via paketet java.util.zip en robust och flexibel verktygslåda för att hantera ZIP-filer och mappar. Oavsett om du behöver skapa, packa upp eller på annat sätt manipulera ZIP-arkiv, har Java de funktioner du behöver.

Vanliga frågor

  • Vad är ZIP-formatet?
    ZIP är ett förlustfritt komprimeringsformat som används för att reducera storleken på filer och mappar.
  • Hur skapar jag ett ZIP-arkiv i Java?
    Genom att använda klassen ZipOutputStream i java.util.zip.
  • Hur extraherar jag filer från ett ZIP-arkiv i Java?
    Med hjälp av klassen ZipInputStream i java.util.zip.
  • Hur listar jag ZIP-entryer i ett ZIP-arkiv i Java?
    Använd metoden ZipFile.entries() för att få en uppräkning av alla ZIP-entryer.
  • Hur får jag information om en ZIP-entry i Java?
    Genom att använda metoderna ZipEntry.getName(), ZipEntry.getSize() och ZipEntry.getMethod().
  • Kan jag lägga till en mapp till ett ZIP-arkiv i Java?
    Ja, genom att skapa en ZipEntry med mappens namn och därefter använda ZipOutputStream.putNextEntry() för att lägga till mappen i arkivet.
  • Kan jag lösenordsskydda ett ZIP-arkiv i Java?
    Ja, det är möjligt med metoden ZipOutputStream.setEncryptionMethod().
  • Hur kan jag förbättra prestandan vid ZIP-komprimering i Java?
    Genom att använda komprimeringsnivån ZipEntry.DEFLATED och använda en så stor buffertstorlek som möjligt.