2011-11-08 2 views
1

J'ai un problème en mettant un dossier dans un fichier zip que j'essaie de créer. Alors que le chemin est valide, quand je cours le code il me donne une Exception de Fichier Non Trouvé. Voici mon codeMettre un dossier dans un zip en Java

String outFilename = "outfile.zip"; 
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename)); 
byte[] buf = new byte[1024]; 
File file = new File("workspace"); 
System.out.println(file.isDirectory()); 
System.out.println(file.getAbsolutePath()); 
FileInputStream in = new FileInputStream(file.getAbsolutePath()); 
out.putNextEntry(new ZipEntry(file.getAbsolutePath())); 
int len; 
while ((len = in.read(buf)) > 0) { 
out.write(buf, 0, len); 
} 

out.closeEntry(); 
in.close(); 
+0

Essayez-vous d'ajouter un seul dossier vide, ou essayez-vous d'ajouter un dossier contenant tous les fichiers récursivement? –

Répondre

1

Vous essayez de lire des octets à partir d'un répertoire; ça ne marche pas comme ça. L'exception en dit autant, aussi.

Vous devez ajouter le répertoire, puis ajouter chaque fichier dans le répertoire. Si vous utilisez le chemin du fichier, vous n'avez pas besoin d'ajouter explicitement le répertoire.

Je serais très mèche d'utiliser le chemin absolu comme l'entrée zip; mieux vaut utiliser un chemin relatif afin de pouvoir le décompresser n'importe où et ne pas risquer d'écraser quelque chose que vous voulez.

+0

donc j'ai besoin de recréer à peu près totalement la structure de fichier qui est dans le répertoire, ou dois-je juste faire le niveau supérieur? –

+0

@JeremyKaplan Vous devez parcourir de manière récursive le répertoire et ajouter chaque entrée individuellement. Ce n'est pas significativement plus difficile, cependant. –

+1

@JeremyKaplan obtenir un peu de copier-n-coller pratique http://www.java-examples.com/create-zip-file-directory-recursively-using-zipoutputstream-example –

Questions connexes