Java >> Java tutorial >  >> Tag >> protected

Sådan opretter du adgangskodebeskyttede zip-filer og udpakker dem i Java

1. Oversigt

I en tidligere vejledning viser vi, hvordan du zipper og udpakker i Java ved hjælp af java.util.zip pakke. Men vi har ikke noget standard Java-bibliotek til at oprette password-beskyttede zip-filer.

I dette selvstudie lærer vi, hvordan du opretter adgangskodebeskyttede zip-filer og udpakker dem med Zip4j-biblioteket. Det er det mest omfattende Java-bibliotek til zip-filer.

2. Afhængigheder

Lad os starte med at tilføje zip4j afhængighed af vores pom.xml fil:

<dependency>
    <groupId>net.lingala.zip4j</groupId>
    <artifactId>zip4j</artifactId>
    <version>2.9.0</version>
</dependency>

3. Zip en fil

Først bruger vi ZipFile addFile() metode at zippe en fil med navnet aFile.txt ind i et adgangskodebeskyttet arkiv ved navn compressed.zip :

ZipParameters zipParameters = new ZipParameters();
zipParameters.setEncryptFiles(true);
zipParameters.setCompressionLevel(CompressionLevel.HIGHER);
zipParameters.setEncryptionMethod(EncryptionMethod.AES);

ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.addFile(new File("aFile.txt"), zipParameters);

setCompressionLevel linje er valgfri. Vi kan vælge mellem niveau HURTIGST til ULTRA (standarden er NORMAL ).

I dette eksempel har vi brugt AES-kryptering. Hvis vi ønsker at bruge Zip-standardkryptering, erstatter vi bare AES med ZIP_STANDARD .

Bemærk, athvis filen "aFile.txt" ikke findes på disken, vil metoden give en undtagelse:"net.lingala.zip4j.exception.ZipException:Filen eksisterer ikke:..."

For at løse dette skal vi sørge for, at filen enten er oprettet manuelt og placeret i projektmappen, eller vi skal oprette den fra Java:

File fileToAdd = new File("aFile.txt");
if (!fileToAdd.exists()) {
    fileToAdd.createNewFile();
}

Også efter at vi er færdige med den nye ZipFile , det er en god praksis at lukke ressourcen:

zipFile.close();

4. Zip flere filer

Lad os ændre koden lidt, så vi kan komprimere flere filer på én gang:

ZipParameters zipParameters = new ZipParameters();
zipParameters.setEncryptFiles(true);
zipParameters.setEncryptionMethod(EncryptionMethod.AES);

List<File> filesToAdd = Arrays.asList(
  new File("aFile.txt"),
  new File("bFile.txt")
);

ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.addFiles(filesToAdd, zipParameters);

I stedet for at bruge addFile metode, vi bruger addFiles() og videregive en liste af filer.

5. Zip en mappe

Vi kan zippe en mappe blot ved at erstatte addFile metode med addFolder :

ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.addFolder(new File("/users/folder_to_add"), zipParameters);

6. Oprettelse af en split zip-fil

Vi kan opdele zip-filen over flere filer, når størrelsen overstiger en bestemt grænse ved at bruge createSplitZipFile og opret SplitZipFileFromFolder metoder:

ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
int splitLength = 1024 * 1024 * 10; //10MB
zipFile.createSplitZipFile(Arrays.asList(new File("aFile.txt")), zipParameters, true, splitLength);
zipFile.createSplitZipFileFromFolder(new File("/users/folder_to_add"), zipParameters, true, splitLength);

Enheden splitLength er bytes.

7. Udpakning af alle filer

Det er lige så enkelt at udpakke filer. Vi kan udpakke alle filer fra vores compressed.zip med extractAll() metode:

ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.extractAll("/destination_directory");

8. Udpakning af en enkelt fil

Og hvis vi bare vil udpakke en enkelt fil fra compressed.zip , kan vi bruge extractFile() metode:

ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray());
zipFile.extractFile("aFile.txt", "/destination_directory");

9. Konklusion

Sammenfattende har vi lært hvordan man opretter adgangskodebeskyttede zip-filer og udpakker dem i Java med Zip4j-biblioteket.

Implementeringen af ​​disse eksempler kan findes på GitHub.


No
Java tag