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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| /**
* Retourne un tableau de byte du dossier à archiver (zip) dont le chemin est à passer en paramètre
* @param String chemin du dossier a archiver
* @param String chemin de la source en relatif
* @param String chemin du fichier temporaire en xml contenant l'écran au format XML qui sera ajouté au zip dans le dossier racine \EcranXML
* @return byte[] archive en tableau de byte
* @throws SauvegardeBaseException
* @throws IOException
*/
public static byte[] genererArchive(String aCheminFichierAZipper, String vCheminSource, String aFichier) throws SauvegardeBaseException,
IOException
{
byte[] vTableauArchiveRetour = null;
//Generation du fichier zip dans un répertoire temporaire
File vFichierCheminSource = new File(vCheminSource);
String vPathCheminSource = vFichierCheminSource.getParent();
vPathCheminSource = vPathCheminSource.substring(1, vPathCheminSource.length());
String vRepertoireTemporaire = System.getProperty("java.io.tmpdir") + vPathCheminSource;
List<FichierArchive> vListFicherArchive = new ArrayList<FichierArchive>();
vListFicherArchive.add(new FichierArchive(aFichier, "EcranXML"));
String vRacine = new File(aCheminFichierAZipper).getParent();
for (String vElementAArchiver : new File(new File(aCheminFichierAZipper).getParent()).list())
{
//on test si l'élément trouvé est un fichier ou un dossier.
//si s'est un fichier, on l'ajoute à la liste, si s'est un dossier on le parcourt pour l'ajouter à la liste
vListFicherArchive = listeRepertoire(vRacine, vElementAArchiver, vFichierCheminSource, vListFicherArchive);
}
File vFichierTemporaire = new File(vRepertoireTemporaire + "\\archiveExportDonneesTemporaire.zip");
if (!vFichierTemporaire.exists())
{
new File(vFichierTemporaire.getParent()).mkdirs();
}
FileUtils.genererArchive(vListFicherArchive, vFichierTemporaire);
ZipFile vFichierTemporaireARetourner = new ZipFile(vRepertoireTemporaire + "\\archiveExportDonneesTemporaire.zip");
//Récupération du zip crée et transformation en tableau de byte[]
ZipEntry vZipEntry = new ZipEntry(vFichierTemporaireARetourner.getName());
// On crée un tableau de byte avec une longueur égal à la taille du fichier
vTableauArchiveRetour = new byte[(int) vFichierTemporaireARetourner.size()];
// on crée un BufferedInputStream, qui va nous permettre de lire plusieurs byte d'un coup
BufferedInputStream in = new BufferedInputStream(vFichierTemporaireARetourner.getInputStream(vZipEntry));
// 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);
return vTableauArchiveRetour;
} |
Partager