Δημιουργία συμπιεσμένου ZIP αρχείου με Java

Αυτό το χρειάστηκα σήμερα το πρωί. Η φιλοσοφία είναι ότι έχουμε να διαχειριστούμε κάποια αρχεία σε ένα ή παραπάνω φακέλους στο δίσκο και πρέπει να δημιουργήσουμε ένα συμπιεσμένο zip αρχείο με τα αρχεία αυτά.

Η λύση είναι αρκετά απλή.

  1. Παίρνουμε τις διαδρομές των αρχείων και τις βάζουμε σε ένα collection (Array πχ)
  2. Ανοίγουμε ένα output stream στο δίσκο που του “δίνουμε zip ιδιότητες”
  3. Διαβάζουμε ένα-ένα τα αρχεία και τα βάζουμε στο  output stream
  4. Κλείνουμε το stream
Παρακάτω είναι ένα παράδειγμα όπου η μέθοδος createZip της κλάσης Archive παίρνει ώς ορίσματα ενα String Array με τις διαδρομές των αρχείων και το όνομα του zip που θα δημιουργηθεί.

[java]

public class Archive {

/**
* @param filenames Files to be included in ZIP
* @param zipfile ZIP file name
*/
public static void createZip(String[] filenames, String zipfile){

// Create a buffer for reading the files
byte[] buf = new byte[1024];

try {
// Create the ZIP file
String outFilename = zipfile;
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename));

// Compress the files
for (int i=0; i<filenames.length; i++) {
FileInputStream in = new FileInputStream(filenames[i]);

// Add ZIP entry to output stream.
out.putNextEntry(new ZipEntry(filenames[i]));

// Transfer bytes from the file to the ZIP file
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}

// Complete the entry
out.closeEntry();
in.close();
}

// Complete the ZIP file
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}
[/java]

Happy ZIPing…     🙂

Passionate Archer, Runner, Linux lover and JAVA Geek! That's about everything! Alexius Dionysius Diakogiannis is a Senior Java Solutions Architect and Squad Lead at the European Investment Bank. He has over 20 years of experience in Java/JEE development, with a strong focus on enterprise architecture, security and performance optimization. He is proficient in a wide range of technologies, including Spring, Hibernate and JakartaEE. Alexius is a certified Scrum Master and is passionate about agile development. He is also an experienced trainer and speaker, and has given presentations at a number of conferences and meetups. In his current role, Alexius is responsible for leading a team of developers in the development of mission-critical applications. He is also responsible for designing and implementing the architecture for these applications, focusing on performance optimization and security.