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 klassenZipOutputStream
ijava.util.zip
. - Hur extraherar jag filer från ett ZIP-arkiv i Java?
Med hjälp av klassenZipInputStream
ijava.util.zip
. - Hur listar jag ZIP-entryer i ett ZIP-arkiv i Java?
Använd metodenZipFile.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 metodernaZipEntry.getName()
,ZipEntry.getSize()
ochZipEntry.getMethod()
. - Kan jag lägga till en mapp till ett ZIP-arkiv i Java?
Ja, genom att skapa enZipEntry
med mappens namn och därefter användaZipOutputStream.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 metodenZipOutputStream.setEncryptionMethod()
. - Hur kan jag förbättra prestandan vid ZIP-komprimering i Java?
Genom att använda komprimeringsnivånZipEntry.DEFLATED
och använda en så stor buffertstorlek som möjligt.