Αυτό το χρειάστηκα σήμερα το πρωί. Η φιλοσοφία είναι ότι έχουμε να διαχειριστούμε κάποια αρχεία σε ένα ή παραπάνω φακέλους στο δίσκο και πρέπει να δημιουργήσουμε ένα συμπιεσμένο zip αρχείο με τα αρχεία αυτά.
Η λύση είναι αρκετά απλή.
- Παίρνουμε τις διαδρομές των αρχείων και τις βάζουμε σε ένα collection (Array πχ)
- Ανοίγουμε ένα output stream στο δίσκο που του “δίνουμε zip ιδιότητες”
- Διαβάζουμε ένα-ένα τα αρχεία και τα βάζουμε στο output stream
- Κλείνουμε το stream
[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]