[Zip] Arboresence de fichier
Bonjour,
Voila ma petite méthode, elle génére un tableau de byte[] à partir du dossier dont le chemin est passé en paramètre a zipper :
Ma question, le chemin passé est un chemin absolu du type P:\open\commun\commun-serveur\target\test-classes\open\transformations\export
Et mon zip est mis dans un fichier temporaire C:\Documents and Settings\moi\Local Settings\Temp
pour ma part, je voudrai garder dans le ZIP l'arboresence open\transformations\export (du premier chemin).
Mais je sais pas comment faire ?
Pour le moment, je me retrouve avec une arbo C:\Documents and Settings\moi\Local Settings\Temp dans le zip (chaque arbo est un dossier).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| /**
* Retourne un tableau de byte du dossier à archiver (zip) dont le chemin est à passer en paramètre
* @param String chemin du dossier a archiver
* @return byte[] archive en tableau de byte
* @throws SauvegardeBaseException
* @throws IOException
*/
public static byte[] genererArchive(String aCheminFichierAZipper) throws SauvegardeBaseException, IOException
{
byte[] vTableauArchiveRetour = null;
//Generation du fichier zip dans un répertoire temporaire
String vRepertoireTemporaire = System.getProperty("java.io.tmpdir");
FichierArchive vFichierArchive = new FichierArchive(aCheminFichierAZipper, vRepertoireTemporaire);
List<FichierArchive> vListFicherArchive = new ArrayList<FichierArchive>();
vListFicherArchive.add(vFichierArchive);
File vFichierTemporaire = new File(vRepertoireTemporaire + "\\archiveExportDonneesTemporaire.zip");
FileUtils.genererArchive(vListFicherArchive, vFichierTemporaire);
File vFichierTemporaireARetourner = new File (vRepertoireTemporaire + "\\archiveExportDonneesTemporaire.zip");
//Récupération du zip crée et transformation en tableau de byte[]
// On crée un tableau de byte avec une longueur égal à la taille du fichier
vTableauArchiveRetour = new byte[(int) vFichierTemporaireARetourner.length()];
// on crée un BufferedInputStream, qui va nous permettre de lire plusieurs byte d'un coup
BufferedInputStream in = new BufferedInputStream(new FileInputStream(vFichierTemporaireARetourner));
// On lit la totalité du ficher.
//Le premier paramètre est le tableau de byte qui va recevoir les données,
//le deuxième est la position dans le fichier où on commence à lire les données (donc zéro puisqu'on commence au début du fichier),
//enfin le dernier paramètre est le nombre d'octet que l'on veut lire
in.read(vTableauArchiveRetour, 0, (int) vFichierTemporaireARetourner.length());
return vTableauArchiveRetour;
} |
Merci :D