Creare file compressi/zippati
DOMANDA:
Posso creare un file .zip o un file compresso in Java?
RISPOSTA:
Nella classe Compress qui di seguito, vi mostro quanto è semplice comprimere un'intera directory:
package compressione;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Compress {
public static void compress(File f,
String path,
ZipOutputStream zos)
throws IOException {
boolean isDirectory = f.isDirectory();
//le directory terminano con "/", altrimenti sono file
final String nextPath = path +
f.getName() +
(isDirectory ? "/" : "");
ZipEntry zipEntry = new ZipEntry(nextPath);
zos.putNextEntry(zipEntry);
if(isDirectory) {
File[] child = f.listFiles();
//ricorsione per ogni figlio
for(int i = 0; i < child.length; i++)
compress(child[i], nextPath, zos);
} else if(f.isFile()) {
FileInputStream fis = new FileInputStream(f);
byte[] readBuffer = new byte[4096];
int bytesIn = 0;
//insert del file nell'ultima zipEntry dello ZipOutputStream
while ((bytesIn = fis.read(readBuffer)) != -1)
zos.write(readBuffer, 0, bytesIn);
fis.close();
}
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Compress {
public static void compress(File f,
String path,
ZipOutputStream zos)
throws IOException {
boolean isDirectory = f.isDirectory();
//le directory terminano con "/", altrimenti sono file
final String nextPath = path +
f.getName() +
(isDirectory ? "/" : "");
ZipEntry zipEntry = new ZipEntry(nextPath);
zos.putNextEntry(zipEntry);
if(isDirectory) {
File[] child = f.listFiles();
//ricorsione per ogni figlio
for(int i = 0; i < child.length; i++)
compress(child[i], nextPath, zos);
} else if(f.isFile()) {
FileInputStream fis = new FileInputStream(f);
byte[] readBuffer = new byte[4096];
int bytesIn = 0;
//insert del file nell'ultima zipEntry dello ZipOutputStream
while ((bytesIn = fis.read(readBuffer)) != -1)
zos.write(readBuffer, 0, bytesIn);
fis.close();
}
}
}
La classe di Test:
package compressione;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipOutputStream;
public class TestCompress {
public static void main(String[] args) throws IOException {
ZipOutputStream zos =
new ZipOutputStream(
new BufferedOutputStream(
new FileOutputStream("C:\\allegato.zip")));
//cartella da comprimere
File f = new File("C:\\test");
File[] listaFiles = f.listFiles();
for(int i=0; i < listaFiles.length; i++){
File currFile = listaFiles[i];
File currZip = new File("C:\\allegato.zip");
Compress.compress(currFile, "", zos);
}
zos.close();
}
}
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipOutputStream;
public class TestCompress {
public static void main(String[] args) throws IOException {
ZipOutputStream zos =
new ZipOutputStream(
new BufferedOutputStream(
new FileOutputStream("C:\\allegato.zip")));
//cartella da comprimere
File f = new File("C:\\test");
File[] listaFiles = f.listFiles();
for(int i=0; i < listaFiles.length; i++){
File currFile = listaFiles[i];
File currZip = new File("C:\\allegato.zip");
Compress.compress(currFile, "", zos);
}
zos.close();
}
}
Controllate nel vostro Hard Disk C:\, se trovate allegato.zip fateci un bel doppio click e provate ad aprire un file contenuto al suo interno. Se si apre siete riusciti a creare il vostro mini WinZip.
Se siete interessati anche alla decompressione, potete leggere questo post.
Commenti
Posta un commento