Accueil > > > ZIP, POUR ZIPER ET DÉZIPER UN FICHIER AISÉMENT EN JAVA
ZIP, POUR ZIPER ET DÉZIPER UN FICHIER AISÉMENT EN JAVA
Information sur la source
Description
Permet de ziper et déziper des fichers. Le code est en Java. Son intéret : faciliter le zipage et le dézipage en Java.
Source
-
- //Titre : Zip
- //Version : 1.0
- //Copyright : Copyright (c) 2002
- //Auteur : JHelp
- //Société : GG
- //Description : Ziper et déziper
- package zip;
-
- import java.util.zip.*;
- import java.util.*;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
-
- /**
- * Classe gérant les fichiers ZIP
- */
- public class ZIP
- {
- //Nom du fichier
- private String fichier;
- //Liste des fichiers contenus dans le zip
- private Vector liste=new Vector();
- //Séparateur de fichier, selon le sytéme d'exploitaion utilisé. Ainsi le code est valide partou
- private static final char separ=File.separatorChar;
- /**
- * Le rang où se trouve le nom
- */
- public static final int placeNom=0;
- /**
- * Le rang où se trouve la taille
- */
- public static final int placeTaille=1;
- /**
- * Le rang où se trouve la taille de compression
- */
- public static final int placeCompression=2;
- /**
- * Le rang où se trouve la date
- */
- public static final int placeDate=3;
- /**
- * Le rang où se trouve le commentaire
- */
- public static final int placeCommentaire=4;
- /**
- * Crée le zip
- * @param fichier Le nom du fichier zip, avec son chemin complet
- */
- public ZIP(String fichier) throws Exception
- {
- this.fichier=fichier;
- File f=new File(fichier);
- //Si le fichier existe, on récupére le nom et les attributs des fichiers compréssés dans le zip
- if(f.exists())
- {
- //C'est un fichier zip
- ZipFile fic=new ZipFile(fichier);
- //Récupération des fichiers
- Enumeration enum=fic.entries();
- while(enum.hasMoreElements())
- liste.addElement(enum.nextElement());
- }
- }
- /**
- * Change le nom du fichier zip, avec un chemin complet
- */
- public void setNom(String nom)
- {
- fichier=nom;
- }
- /**
- * Donne un vecteur titre. Peut servir pour l'ent^te d'un JTable
- */
- public static Vector getTitre()
- {
- Vector titre=new Vector();
- titre.addElement("Nom");
- titre.addElement("Taille");
- titre.addElement("Compression");
- titre.addElement("Date");
- titre.addElement("Commentaire");
- return titre;
- }
- /**
- * Vecteur de vecteur contenant les donnéees <BR>
- * Pour récupérer la ligne l, colonnne c, faire : <BR>
- * Vector donnes=zip.contenu(); <BR>
- * ... <BR>
- * Vector lig=(Vector)donnees.get(l); <BR>
- * String valeur=(String)lig.get(c);
- */
- public Vector contenu()
- {
- int nb=liste.size();
- Vector donnees=new Vector();
- for(int i=0;i<nb;i++)
- {
- Vector ligne=new Vector();
- ZipEntry entre=(ZipEntry)liste.elementAt(i);
- ligne.addElement(entre.getName());
- ligne.addElement(""+entre.getSize());
- long j=entre.getCompressedSize();
- if(j>=0)
- ligne.addElement(""+j);
- else
- ligne.addElement("");
- Date date=new Date(entre.getTime());
- Calendar calendrier=Calendar.getInstance();
- calendrier.setTime(date);
- ligne.addElement(
- calendrier.get(Calendar.HOUR_OF_DAY)+"h"+
- calendrier.get(Calendar.MINUTE)+"m"+
- calendrier.get(Calendar.SECOND)+"s le "+
- calendrier.get(Calendar.DAY_OF_MONTH)+"/"+
- calendrier.get(Calendar.MONTH)+"/"+
- calendrier.get(Calendar.YEAR));
- ligne.addElement(entre.getComment());
- donnees.addElement(ligne);
- }
- return donnees;
- }
- /**
- * Donne une chaine représentant la caractéristique du fichier <BR>
- * @param place Rang de la caratéristique. <BR>
- * @param numero Numéro du fichier contenu dans le zip <BR>
- * Exemple : <BR>
- * Pour avoir la taille de compression du fichier numéro 5 faire : <BR>
- * String taille=zip.get(ZIP.placeCompression,5);
- */
- public String get(int place,int numero)
- {
- //Récupération des caractéristiques du fichier
- ZipEntry entre=(ZipEntry)liste.elementAt(numero);
- //Selon la caractéristique demandée, retourner la valeur corespondante
- switch(place)
- {
- //Le commentaire
- case placeCommentaire :
- return entre.getComment();
- //La taille de compression
- case placeCompression :
- long j=entre.getCompressedSize();
- if(j>=0)
- return ""+j;
- return "";
- //La date du fichier
- case placeDate :
- //Transformation de la date exprimée en milliseconde, en date plus courante
- Date date=new Date(entre.getTime());
- //Mise en place d'un calendrier à partir de la date
- Calendar calendrier=Calendar.getInstance();
- calendrier.setTime(date);
- //Renvoie des données
- return calendrier.get(Calendar.HOUR_OF_DAY)+"h"+
- calendrier.get(Calendar.MINUTE)+"m"+
- calendrier.get(Calendar.SECOND)+"s le "+
- calendrier.get(Calendar.DAY_OF_MONTH)+"/"+
- calendrier.get(Calendar.MONTH)+"/"+
- calendrier.get(Calendar.YEAR);
- //Le nom du fichier
- case placeNom :
- return entre.getName();
- //La taille réelle du fichier
- case placeTaille :
- return ""+entre.getSize();
- }
- //Renvoie la chaîne vide si la caractéristique n'existe pas
- return "";
- }
- /**
- * Ajoute un fichier au fichier zip
- */
- public void ajouteFichier(File fichier)
- {
- ajouteFichier(fichier,null);
- }
- /**
- * Ajoute un fichier au fichier zip avec un commentaire
- */
- public void ajouteFichier(File fichier,String commentaire)
- {
- //Transforme le fichier en entrée du zip
- ZipEntry entre=new ZipEntry(fichier.getAbsolutePath().substring(3).replace(separ,'/'));
- entre.setSize(fichier.length());
- entre.setTime(fichier.lastModified());
- if(commentaire!=null)
- entre.setComment(commentaire);
- //Ajoute l'éntrée
- liste.addElement(entre);
- }
- /**
- * Retire le fichier du zip
- */
- public void retire(File fichier)
- {
- //Cacul le nom de l'entrée, en majuscule, corespondante au fichier
- String s=fichier.getAbsolutePath().substring(3).replace(separ,'/').toUpperCase();
- //Chercher le rang de l'éntrée corespondante
- int rang=-1;
- int nb=liste.size();
- for(int i=0;(i<nb)&&(rang<0);i++)
- {
- ZipEntry entre=(ZipEntry)liste.elementAt(i);
- if(entre.getName().toUpperCase().equals(s))
- rang=i;
- }
- //Si l'éntrée existe, la retirée
- if(rang>=0)
- liste.removeElementAt(rang);
- }
- /**
- * @return Le nom du fichier
- */
- public int getNombreFichier()
- {
- return liste.size();
- }
- /**
- * Retire l'élélement numéro numero
- */
- public void retire(int numero)
- {
- liste.removeElementAt(numero);
- }
- /**
- * Zip les fichiers dans le nom du zip correspondant. Met à jour les changements.
- */
- public void ziper() throws Exception
- {
- //Si le fichier n'existe pas, le créer
- File f=new File(fichier);
- if(!f.exists())
- f.createNewFile();
- //Ouverture du fichier zip en écriture
- ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(fichier));
- //Pour chaque entrée du zip
- int nb=liste.size();
- for(int i=0;i<nb;i++)
- {
- //Récupérer l'éntrée courante
- ZipEntry entre=(ZipEntry)liste.elementAt(i);
- //Récupérer le nom de l'entrée
- String nom=entre.getName();
- //Ajouter l'entrée au fichier physique zip
- zos.putNextEntry(entre);
- //Ouvrir l'entrée en lecture
- FileInputStream fis=new FileInputStream("C:\\"+nom.replace('/',separ));
- //Ziper l'entrée dans le fichier zip
- byte[] tab=new byte[4096];
- int lu=-1;
- do
- {
- lu=fis.read(tab);
- if(lu>0)
- zos.write(tab,0,lu);
- }while(lu>0);
- //Fermer l'entrée
- fis.close();
- }
- //Force à finir le zipage, si jamais il reste des bits non traités
- zos.flush();
- //Ferme le fichier zip
- zos.close();
- }
- /**
- * Dézipe le fichier dans le dossier en paramétre. Respect du nom des dossiers et sous-dossiers
- */
- public void deziper(File dossier) throws Exception
- {
- //Ouverture du fichier zip en lecture
- ZipInputStream zis=new ZipInputStream(new FileInputStream(fichier));
- //Récupére les entrées éffectivement zipées dans le zip
- ZipEntry ze=zis.getNextEntry();
- //Tant qu'il y a des entrées
- while(ze!=null)
- {
- //Crée le dossier contenant le fichier une fois déziper, si il n'existe pas
- File f=new File(dossier.getAbsolutePath()+separ+ze.toString().replace('/',separ));
- f.getParentFile().mkdirs();
- //Ouvre l'entrée le fichier à déziper en écriture, le crée s'il n'existe pas
- FileOutputStream fos=new FileOutputStream(f);
- //Dézipe le fichier
- int lu=-1;
- byte[] tampon=new byte[4096];
- do
- {
- lu=zis.read(tampon);
- if(lu>0)
- fos.write(tampon,0,lu);
- } while(lu>0);
- //Finir proprement
- fos.flush();
- //Fermer le fichier à déziper
- fos.close();
- //Passer au suivant
- ze=zis.getNextEntry();
- }
- //Fermer le fichier zip
- zis.close();
- }
- /**
- * Modifie le commentaire du fichier numéro numero
- */
- public void setCommentaire(int numero,String commentaire)
- {
- ZipEntry entre=(ZipEntry)liste.elementAt(numero);
- entre.setComment(commentaire);
- }
- }
//Titre : Zip
//Version : 1.0
//Copyright : Copyright (c) 2002
//Auteur : JHelp
//Société : GG
//Description : Ziper et déziper
package zip;
import java.util.zip.*;
import java.util.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* Classe gérant les fichiers ZIP
*/
public class ZIP
{
//Nom du fichier
private String fichier;
//Liste des fichiers contenus dans le zip
private Vector liste=new Vector();
//Séparateur de fichier, selon le sytéme d'exploitaion utilisé. Ainsi le code est valide partou
private static final char separ=File.separatorChar;
/**
* Le rang où se trouve le nom
*/
public static final int placeNom=0;
/**
* Le rang où se trouve la taille
*/
public static final int placeTaille=1;
/**
* Le rang où se trouve la taille de compression
*/
public static final int placeCompression=2;
/**
* Le rang où se trouve la date
*/
public static final int placeDate=3;
/**
* Le rang où se trouve le commentaire
*/
public static final int placeCommentaire=4;
/**
* Crée le zip
* @param fichier Le nom du fichier zip, avec son chemin complet
*/
public ZIP(String fichier) throws Exception
{
this.fichier=fichier;
File f=new File(fichier);
//Si le fichier existe, on récupére le nom et les attributs des fichiers compréssés dans le zip
if(f.exists())
{
//C'est un fichier zip
ZipFile fic=new ZipFile(fichier);
//Récupération des fichiers
Enumeration enum=fic.entries();
while(enum.hasMoreElements())
liste.addElement(enum.nextElement());
}
}
/**
* Change le nom du fichier zip, avec un chemin complet
*/
public void setNom(String nom)
{
fichier=nom;
}
/**
* Donne un vecteur titre. Peut servir pour l'ent^te d'un JTable
*/
public static Vector getTitre()
{
Vector titre=new Vector();
titre.addElement("Nom");
titre.addElement("Taille");
titre.addElement("Compression");
titre.addElement("Date");
titre.addElement("Commentaire");
return titre;
}
/**
* Vecteur de vecteur contenant les donnéees <BR>
* Pour récupérer la ligne l, colonnne c, faire : <BR>
* Vector donnes=zip.contenu(); <BR>
* ... <BR>
* Vector lig=(Vector)donnees.get(l); <BR>
* String valeur=(String)lig.get(c);
*/
public Vector contenu()
{
int nb=liste.size();
Vector donnees=new Vector();
for(int i=0;i<nb;i++)
{
Vector ligne=new Vector();
ZipEntry entre=(ZipEntry)liste.elementAt(i);
ligne.addElement(entre.getName());
ligne.addElement(""+entre.getSize());
long j=entre.getCompressedSize();
if(j>=0)
ligne.addElement(""+j);
else
ligne.addElement("");
Date date=new Date(entre.getTime());
Calendar calendrier=Calendar.getInstance();
calendrier.setTime(date);
ligne.addElement(
calendrier.get(Calendar.HOUR_OF_DAY)+"h"+
calendrier.get(Calendar.MINUTE)+"m"+
calendrier.get(Calendar.SECOND)+"s le "+
calendrier.get(Calendar.DAY_OF_MONTH)+"/"+
calendrier.get(Calendar.MONTH)+"/"+
calendrier.get(Calendar.YEAR));
ligne.addElement(entre.getComment());
donnees.addElement(ligne);
}
return donnees;
}
/**
* Donne une chaine représentant la caractéristique du fichier <BR>
* @param place Rang de la caratéristique. <BR>
* @param numero Numéro du fichier contenu dans le zip <BR>
* Exemple : <BR>
* Pour avoir la taille de compression du fichier numéro 5 faire : <BR>
* String taille=zip.get(ZIP.placeCompression,5);
*/
public String get(int place,int numero)
{
//Récupération des caractéristiques du fichier
ZipEntry entre=(ZipEntry)liste.elementAt(numero);
//Selon la caractéristique demandée, retourner la valeur corespondante
switch(place)
{
//Le commentaire
case placeCommentaire :
return entre.getComment();
//La taille de compression
case placeCompression :
long j=entre.getCompressedSize();
if(j>=0)
return ""+j;
return "";
//La date du fichier
case placeDate :
//Transformation de la date exprimée en milliseconde, en date plus courante
Date date=new Date(entre.getTime());
//Mise en place d'un calendrier à partir de la date
Calendar calendrier=Calendar.getInstance();
calendrier.setTime(date);
//Renvoie des données
return calendrier.get(Calendar.HOUR_OF_DAY)+"h"+
calendrier.get(Calendar.MINUTE)+"m"+
calendrier.get(Calendar.SECOND)+"s le "+
calendrier.get(Calendar.DAY_OF_MONTH)+"/"+
calendrier.get(Calendar.MONTH)+"/"+
calendrier.get(Calendar.YEAR);
//Le nom du fichier
case placeNom :
return entre.getName();
//La taille réelle du fichier
case placeTaille :
return ""+entre.getSize();
}
//Renvoie la chaîne vide si la caractéristique n'existe pas
return "";
}
/**
* Ajoute un fichier au fichier zip
*/
public void ajouteFichier(File fichier)
{
ajouteFichier(fichier,null);
}
/**
* Ajoute un fichier au fichier zip avec un commentaire
*/
public void ajouteFichier(File fichier,String commentaire)
{
//Transforme le fichier en entrée du zip
ZipEntry entre=new ZipEntry(fichier.getAbsolutePath().substring(3).replace(separ,'/'));
entre.setSize(fichier.length());
entre.setTime(fichier.lastModified());
if(commentaire!=null)
entre.setComment(commentaire);
//Ajoute l'éntrée
liste.addElement(entre);
}
/**
* Retire le fichier du zip
*/
public void retire(File fichier)
{
//Cacul le nom de l'entrée, en majuscule, corespondante au fichier
String s=fichier.getAbsolutePath().substring(3).replace(separ,'/').toUpperCase();
//Chercher le rang de l'éntrée corespondante
int rang=-1;
int nb=liste.size();
for(int i=0;(i<nb)&&(rang<0);i++)
{
ZipEntry entre=(ZipEntry)liste.elementAt(i);
if(entre.getName().toUpperCase().equals(s))
rang=i;
}
//Si l'éntrée existe, la retirée
if(rang>=0)
liste.removeElementAt(rang);
}
/**
* @return Le nom du fichier
*/
public int getNombreFichier()
{
return liste.size();
}
/**
* Retire l'élélement numéro numero
*/
public void retire(int numero)
{
liste.removeElementAt(numero);
}
/**
* Zip les fichiers dans le nom du zip correspondant. Met à jour les changements.
*/
public void ziper() throws Exception
{
//Si le fichier n'existe pas, le créer
File f=new File(fichier);
if(!f.exists())
f.createNewFile();
//Ouverture du fichier zip en écriture
ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(fichier));
//Pour chaque entrée du zip
int nb=liste.size();
for(int i=0;i<nb;i++)
{
//Récupérer l'éntrée courante
ZipEntry entre=(ZipEntry)liste.elementAt(i);
//Récupérer le nom de l'entrée
String nom=entre.getName();
//Ajouter l'entrée au fichier physique zip
zos.putNextEntry(entre);
//Ouvrir l'entrée en lecture
FileInputStream fis=new FileInputStream("C:\\"+nom.replace('/',separ));
//Ziper l'entrée dans le fichier zip
byte[] tab=new byte[4096];
int lu=-1;
do
{
lu=fis.read(tab);
if(lu>0)
zos.write(tab,0,lu);
}while(lu>0);
//Fermer l'entrée
fis.close();
}
//Force à finir le zipage, si jamais il reste des bits non traités
zos.flush();
//Ferme le fichier zip
zos.close();
}
/**
* Dézipe le fichier dans le dossier en paramétre. Respect du nom des dossiers et sous-dossiers
*/
public void deziper(File dossier) throws Exception
{
//Ouverture du fichier zip en lecture
ZipInputStream zis=new ZipInputStream(new FileInputStream(fichier));
//Récupére les entrées éffectivement zipées dans le zip
ZipEntry ze=zis.getNextEntry();
//Tant qu'il y a des entrées
while(ze!=null)
{
//Crée le dossier contenant le fichier une fois déziper, si il n'existe pas
File f=new File(dossier.getAbsolutePath()+separ+ze.toString().replace('/',separ));
f.getParentFile().mkdirs();
//Ouvre l'entrée le fichier à déziper en écriture, le crée s'il n'existe pas
FileOutputStream fos=new FileOutputStream(f);
//Dézipe le fichier
int lu=-1;
byte[] tampon=new byte[4096];
do
{
lu=zis.read(tampon);
if(lu>0)
fos.write(tampon,0,lu);
} while(lu>0);
//Finir proprement
fos.flush();
//Fermer le fichier à déziper
fos.close();
//Passer au suivant
ze=zis.getNextEntry();
}
//Fermer le fichier zip
zis.close();
}
/**
* Modifie le commentaire du fichier numéro numero
*/
public void setCommentaire(int numero,String commentaire)
{
ZipEntry entre=(ZipEntry)liste.elementAt(numero);
entre.setComment(commentaire);
}
}
Conclusion
Si vous avez des questions concernant ce code, des commentaires, des critiques, des méthodes qui vous manquent, n'esitez pas à me contacter. A bientôt. JHelp
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Zip, servlet, et fichier Excel [ par as634 ]
J'ai créé un fichier excel grace à jExcel. Je voudrais insérer ce fichier dans une archive zip qui sera renvoyée par ma servlet.Voici mon code pour la
Compatibilite de Zip? [ par larecrue ]
Bonjour, J’ai quelques problemes: Le plus facile: comment fait on pour n’avoir que la petite croix pour fermer dans sa Jframe. Un peu pl
How to "Splitter un fichier zip généré en java ? " [ par homerosaur ]
Salut à tous,je recherche un moyen de splitter un fichier zip que je génère en java.Mille merci d'avance à qui pourrait m'aidertiti
download d'un fichier zip sur un site internet [ par yann.jaunin ]
Hello,j'essaye de télécharger un fichier zip qui se trouve sur un site internet. Je suis débutant donc soyez indulgent :-)voici l'erreur que j'aie :un
PROBLEME DE ZIP [ par gui_llaume1 ]
Bonjour à tous,J'explique mon cas.Je crée dans une appli swing à un moment un fichier zip à partir d'un tableau de String contenan
Lire fichier .zip [ par luckybenji86 ]
Bonjour,J'aimerai savoir si quelqu'un à déja essayé de lire des fichier dans un .zip avec mot de passe.En utilisant la libririe java.util.zip mais cel
Comment utiliser un fichier zip télécharger [ par Naidoo ]
Bonsoir à tous,j'ai besoin d'aide car j'ai de la peine à cerner un certain problème...Pouvez vous m'expliquer, points par points, comment utiliser un
[A SUPPRIMER]ouvrir un fichier en format zip par une application java. [ par radjaco ]
bonjour, j'ai un fichier zip qui contient plusieurs fichiers .txt,je veudrai savoir comment faire pour afficher le contenu d'un de ces fichiers textes
decompresser un fichier zip [ par kam81 ]
Bonjour,Je cherche de l'aide pour decompresser un fichier zip se trouvant dans un repertoire rep1et envoyer le resultat dans un repertoire rep2.merci.
compression audio [ par simson ]
Bonjour, Existe il une classe pour compresser et décompresser un fichier sonore ( comme le mp3 par exemple) ou faut il faire l'algorithme soit
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Forum
PARSER DE XMLPARSER DE XML par fioreT
Cliquez pour lire la suite par fioreT
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|