Projet JavaZip

Réalisé par : Karine Olszowy et Christophe Renault

Enseignant : Michel Buffa

Il est important de signaler qu'aucune décompression temporaire n'est faite pour les différentes opérations sur l'archive, une simple copie de fichier zip est réalisée dans un fichier temp.zip qui est effacée par le Cleaner.

Sujet :

Ce projet consistait à écrire une interface graphique permettant de manipuler les formats de fichiers zip et gzip à la manière du célèbre WinZip disponible sous Windows, en utilisant les APIs d'archive du langage JAVA .

Les APIs Zip :

La librairie de classes java.util.zip permet de programmer la compression/décompression de fichiers et de répertoires. Si d'un premier abord, il semble facile d'implémenter la compression et la décompression d'archives au format zip, il est important de signaler que les fonctionnalités offertes par Java sont assez limitées, et qu'il reste beaucoup de travail avant d'arriver à des manipulations dignes de WinZip. Les classes fournies peuvent se répartir selon les 3 catégories suivantes :

             Compression
                          Dans la librairie de classes zip, les algorithmes de compression et de décompression se trouvent respectivement dans les classes Deflator et Inflator. Ces classes supportent les deux types de compression ZIP et GZIP. Si ces classes sont les classes clefs de la librairie zip, on ne les utilise pas directement. On utilise les classes (G)ZipInputStream et (G)ZipOutputStream permettant de lire et d'écrire dans les flux de communication avec les fichiers.
             Consultation d'archives
                          Un fichier d'archive est essentiellement constitué d'un certain nombre d'entries représentant les fichiers et répertoires qu'il contient. La consultation et l'accès à un fichier archive se fait à l'aide des classes ZipFile et ZipEntry représentant respectivement un fichier archive et une entry.

La gestion de la compression/décompression :

Cette partie constitue le noyau de l'application, et a été développé totalement séparément de l'interface graphique.

Elle est composée de 6 classes :

  La classe Archive :

La classe Archive est dérivée de la classe ZipFile, et permet ainsi de lire les informations des fichiers de l'archive. Elle est utilisée par la classe Zip.

  Les classes SimpleZip et Zip :

Une classe SimpleZip a été créée pour réaliser les opérations de base concernant l'écriture dans le flux vers l'archive. La classe Zip dérive de cette classe de base, et permet la compression de fichier ou de répertoire, et les opérations telle que l'ajout et la suppression d'éléments de l'archive.

  Les classes SimpleUnzip et Unzip :

De la même manière, la classe Unzip dérive de la classe SimpleUnzip, et permet la décompression de l'archive entière.

  La classe Cleaner :

Une classe Cleaner a été créée essentiellement pour effacer les fichiers temporaires nécessaires aux différentes manipulations de l'archive.

La gestion de l'interface graphique :

Elle est composée de 4 classes :

  La classe TableMap :

La classe TableMap permet de gérer le tableau d'information de l'interface.

  La classe TableSorter :

La classe TableSorter permet de trier le TableModels utilisé par le tableau d'information de l'interface.

  La classe ZipFilter :

La classe ZipFilter permet de filtrer les fichiers lors de la sélection de fichier (action ajout, création, ouverture d'archive...).

  La classe JavaZip :

La classe JavaZip est la classe application.

Attention: la version finale de l'application n'a été testée que sur PC avec VisualAge for Java.

Les fonctionnalités offertes :

Pour le moment, notre JavaZip permet de compresser des fichiers et des répertoires sous le format zip uniquement. Les manipulations de base offertes par WinZip ont été implémentées. Il est ainsi possible de créer une nouvelle archive, d'ouvrir une archive existante, d'ajouter un fichier ou un répertoire à l'archive, et d'extraire des fichiers de l'archive. L'interface graphique, très proche de celle de WinZip, permet une utilisation intuitive de notre application.

Des petits problèmes rencontrés avec le JDK nous ont empêchés d'implémenter quelques fonctionnalités comme la sélection multi-fichiers qui, à notre grande surprise n'était en fait pas réellement implémentée. Il est important de signaler que nous avons dû nous contenter de la version du JDK installée sur les machines de l'école...

La fenêtre principale de l'application comprend :
  • Une barre de menu contenant les actions relatives à la consultation du contenu d'une archive, à la compression et décompression.
  • Une barre de boutons permettant d'accéder directement aux actions principales.
  • Un tableau de visualisation du contenu de l'archive.
  • Une barre d'état donnant des informations sur la taille du ou des fichiers sélectionnés, mais aussi une indication sur l'état de l'application (en éxécution/en attente).
Procéder à la création d'une archive :
  • En cliquant sur le bouton New ou en sélectionnant File/New Archive... la fenêtre de création d'archive apparaît.
  • En donnant un nom de fichier, ou bien en sélectionnant un fichier, une nouvelle archive est créée.
  • Une fenêtre d'ajout d'un élément apparaît ensuite pour procéder a la compression.
Procéder à l'ouverture d'une archive :
  • Tout simplement en cliquant sur le bouton Open ou bien en sélectionnant File/Open Archive..., le fichier zip est ouvert et le détail de son contenu est affiché dans la table d'information.
  • En sélectionnant un ou plusieurs fichiers, l'utilisateur peut visualiser la taille mémoire de sa sélection sur la barre d'état.
  • Il peut également interchanger les colonnes des informations, effectuer un tri sur chacun des attributs des éléments de l'archive.
Ajouter un nouvel élément à l'archive :
  • En cliquant sur le bouton Add ou bien en sélectionnant File/Add, la fenêtre d'ajout d'un élément apparaît.
  • Il suffit ensuite de sélectionner l'élément a ajouter à l'archive (fichier ou répertoire).


  • On peut sélectionner plusieurs éléments mais ça ne marche pas! (cela n'est pas encore implémenté dans la classe Java que nous avons utilisée!)
Procéder à l'extraction d'éléments de l'archive :
  • En cliquant sur le bouton Extract ou bien en sélectionnant File/Extract, la fenêtre d'extraction apparaît.
  • Il faut sélectionner le répertoire où la décompression doit s'effectuer.


  • L'extraction s'effectue sur toute l'archive. Nous avons implémenté l'extraction d'un seul élément, mais elle n'a pas encore été raccordée à l'interface.
Le menu File contient les actions de manipulation de l'archive :
  • Création
  • Ouverture
  • Fermeture
Le menu Action contient les actions relatives aux opérations sur l'archive, mais aussi les actions relatives aux sélections dans la table d'information.
  • Ajout d'un élément
  • Suppression d'un élément
  • Extraction des éléments

  • Sélection globale
  • Désélection
Le menu Help contient :
  • L'aide (pas encore disponible...)
  • Le fameux à propos


JavaZip a été développé sur SUN SOLARIS pour tout ce qui concerne le noyau de l'application. L'interface graphique a été réalisée sous VisualAge for Java.

Les sources de JavaZip