Ce code Java doit être intégré directement dans une activité Java Code dans TIBCO BusinessWorks (ce code a été testé sur TIBCO BW 5 contenant une jre 1.8). Il permet de :
- Créer une archive ZIP à partir d’un dossier source
- Choisir un répertoire de sortie différent
- Filtrer les fichiers par extension
- Inclure ou non les sous-dossiers
- Générer un nom de fichier ZIP dynamique
Paramètres d’entrée
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
dossierPath | String | Oui | Chemin du répertoire à zipper |
repertoireSortie | String | Oui | Répertoire où le fichier ZIP sera créé |
InclureSousDossiers | Boolean | Oui | Inclut récursivement les sous-dossiers si vrai |
extensionIncluse | String | Non | Filtre par extension (ex. .txt, .xml). Par défaut le code prend tous les fichiers si non précisé. |
Paramètres de sortie
| Nom | Type | Description |
|---|---|---|
zipStatus | String | « Succès », « Erreur » ou « Aucun fichier » |
zipPath | String | Chemin absolu du fichier ZIP généré |
errorMessage | String | Détail de l’erreur en cas d’échec |
Fonctionnement
- Vérifie les répertoires source et de sortie
- Génère un fichier ZIP nommé
archive_YYYYMMDD_HHmmss.zip - Parcourt les fichiers du dossier source (récursivement si indiqué avec le paramètre
InclureSousDossiers) - Filtre les fichiers selon l’extension si précisé
- Ajoute tous les fichiers à plat dans le ZIP (sans structure de dossiers)
- Exclut automatiquement le ZIP en cours de création
Points d’attention
- Les fichiers du même nom issus de dossiers différents écrasent les précédents dans le ZIP
- Le fichier ZIP généré n’est jamais inclus dans lui-même
- L’extension doit inclure le point (ex.
.txt) - Le code ne conserve ni les métadonnées ni les droits des fichiers
Limites
- Pas de détection de doublons ou renommage automatique
- Le ZIP est remplacé s’il existe déjà avec le même nom
- Pas de compression multi-thread (standard Java 8)
Exemple d’exécution
dossierPath = /dmi/esb/principal
repertoireSortie = /dmi/esb/out
InclureSousDossiers = true
extensionIncluse =
archive_20251112_154512.zip
Contient tous les fichiers de /dmi/esb/principal et ses sous-dossiers
Note: Si vous exécutez ce code dans un contexte entreprise, c’est à vous de vérifier son bon fonctionnement et les attendus. Je ne suis en aucun cas responsable de ce que vous en faites.
/* Available Variables: DO NOT MODIFY
In : String extensionIncluse
In : String dossierPath
In : boolean InclureSousDossiers
In : String repertoireSortie
Out : String zipStatus
Out : String zipPath
Out : String errorMessage
* Available Variables: DO NOT MODIFY *****/
// Entrée : dossierPath (String) à mapper depuis BW
// Vérifier le dossier
java.io.File dossier = new java.io.File(dossierPath);
if (!dossier.exists() || !dossier.isDirectory()) {
throw new IllegalArgumentException("Le chemin source n'est pas un dossier valide : " + dossierPath);
}
//vériier le répertoire de sortie
java.io.File repSortie = new java.io.File(repertoireSortie);
if (!repSortie.exists() || !repSortie.isDirectory()) {
throw new IllegalArgumentException("Le répertoire de sortie n'est pas valide : " + repertoireSortie);
}
// Nom du fichier ZIP dynamique
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd_HHmmss");
String nomZip = "archive_" + sdf.format(new java.util.Date()) + ".zip";
java.io.File fichierZip = new java.io.File(repSortie, nomZip);
try (
java.io.FileOutputStream fos = new java.io.FileOutputStream(fichierZip);
java.util.zip.ZipOutputStream zos = new java.util.zip.ZipOutputStream(fos)
) {
boolean contenuAjoute = false;
if (InclureSousDossiers) {
java.util.Stack<java.io.File> pile = new java.util.Stack<java.io.File>();
pile.push(dossier);
while (!pile.isEmpty()) {
java.io.File courant = pile.pop();
java.io.File[] fichiers = courant.listFiles();
if (fichiers == null) continue;
for (java.io.File fichier : fichiers) {
// Ne pas ajouter le fichier ZIP lui-même
if (fichier.equals(fichierZip)) {
continue;
}
if (fichier.isDirectory()) {
pile.push(fichier);
continue;
}
if (extensionIncluse != null && !extensionIncluse.trim().isEmpty()) {
if (!fichier.getName().toLowerCase().endsWith(extensionIncluse.toLowerCase())) {
continue;
}
}
java.io.FileInputStream fis = new java.io.FileInputStream(fichier);
java.util.zip.ZipEntry entree = new java.util.zip.ZipEntry(fichier.getName()); // à plat
zos.putNextEntry(entree);
byte[] buffer = new byte[1024];
int longueur;
while ((longueur = fis.read(buffer)) > 0) {
zos.write(buffer, 0, longueur);
}
zos.closeEntry();
fis.close();
contenuAjoute = true;
}
}
} else {
java.io.File[] fichiers = dossier.listFiles(new java.io.FileFilter() {
public boolean accept(java.io.File file) {
return file.isFile();
}
});
if (fichiers != null) {
for (java.io.File fichier : fichiers) {
if (fichier.equals(fichierZip)) {
continue;
}
if (extensionIncluse != null && !extensionIncluse.trim().isEmpty()) {
if (!fichier.getName().toLowerCase().endsWith(extensionIncluse.toLowerCase())) {
continue;
}
}
java.io.FileInputStream fis = new java.io.FileInputStream(fichier);
java.util.zip.ZipEntry entree = new java.util.zip.ZipEntry(fichier.getName());
zos.putNextEntry(entree);
byte[] buffer = new byte[1024];
int longueur;
while ((longueur = fis.read(buffer)) > 0) {
zos.write(buffer, 0, longueur);
}
zos.closeEntry();
fis.close();
contenuAjoute = true;
}
}
}
if (contenuAjoute) {
zipStatus = "Succès";
zipPath = fichierZip.getAbsolutePath();
} else {
zipStatus = "Aucun fichier";
fichierZip.delete();
}
} catch (java.io.IOException e) {
zipStatus = "Erreur";
errorMessage = e.getMessage();
e.printStackTrace();
}
// Variables de sortie (captées automatiquement par BW)
zipStatus = zipStatus;
zipPath = zipPath;
errorMessage = errorMessage;
Téléchargez le Projet pour BW5 (à la demande)
Voici la version 2
/* Available Variables: DO NOT MODIFY
In : String extensionIncluse
In : String dossierPath
In : boolean InclureSousDossiers
In : String repertoireSortie
Out : String zipStatus
Out : String zipPath
Out : String errorMessage
* Available Variables: DO NOT MODIFY *****/
// Entrée : dossierPath (String) à mapper depuis BW
// Initialisation des répertoires
java.io.File dossier = new java.io.File(dossierPath);
java.io.File repSortie = new java.io.File(repertoireSortie);
if (!dossier.exists() || !dossier.isDirectory()) {
throw new IllegalArgumentException("Le chemin source n'est pas un dossier valide : " + dossierPath);
}
if (!repSortie.exists() || !repSortie.isDirectory()) {
throw new IllegalArgumentException("Le répertoire de sortie n'est pas valide : " + repertoireSortie);
}
// Création du ZIP
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd_HHmmss");
String nomZip = "archive_" + sdf.format(new java.util.Date()) + ".zip";
java.io.File fichierZip = new java.io.File(repSortie, nomZip);
try (
java.io.FileOutputStream fos = new java.io.FileOutputStream(fichierZip);
java.util.zip.ZipOutputStream zos = new java.util.zip.ZipOutputStream(fos)
) {
boolean contenuAjoute = false;
java.util.Stack<java.io.File> pile = new java.util.Stack<java.io.File>();
pile.push(dossier);
while (!pile.isEmpty()) {
java.io.File courant = pile.pop();
java.io.File[] fichiers = courant.listFiles();
if (fichiers == null) continue;
for (java.io.File fichier : fichiers) {
if (fichier.equals(fichierZip)) continue; // Ne pas inclure le ZIP lui-même
if (fichier.isDirectory()) {
pile.push(fichier);
} else {
if (extensionIncluse != null && !extensionIncluse.trim().isEmpty()) {
if (!fichier.getName().toLowerCase().endsWith(extensionIncluse.toLowerCase())) {
continue;
}
}
// Chemin relatif pour conserver l'arborescence
String cheminRelatif = dossier.toURI().relativize(fichier.toURI()).getPath();
java.io.FileInputStream fis = new java.io.FileInputStream(fichier);
java.util.zip.ZipEntry entree = new java.util.zip.ZipEntry(cheminRelatif);
zos.putNextEntry(entree);
byte[] buffer = new byte[1024];
int longueur;
while ((longueur = fis.read(buffer)) > 0) {
zos.write(buffer, 0, longueur);
}
zos.closeEntry();
fis.close();
contenuAjoute = true;
}
}
}
if (contenuAjoute) {
zipStatus = "Succès";
zipPath = fichierZip.getAbsolutePath();
} else {
zipStatus = "Aucun fichier";
fichierZip.delete();
}
} catch (java.io.IOException e) {
zipStatus = "Erreur";
errorMessage = e.getMessage();
e.printStackTrace();
}
// Sorties TIBCO (automatiques si même nom dans l'onglet Output)
zipStatus = zipStatus;
zipPath = zipPath;
errorMessage = errorMessage;