Mise en oeuvre de l'API

Installation

L'installation proprement dite de VFS consiste à placer le jar de VFS ainsi que les éventuels jar optionnels dans le CLASSPATH. La dernière version de VFS peut-être téléchargée à partir de :

http://cvs.apache.org/builds/jakarta-commons/nightly/commons-vfs/

Aperçu général du fonctionnement de l'API

L'interface centrale de l'API est l'interface FileObject. Cette interface représente un fichier appartenant à l'un des systèmes de fichiers reconnus par l'API.
Le point d'entrée de l'API pour obtenir une instance d'un FileObject est fourni par une des méthodes de la classe VFS.
Cette classe possède deux méthodes statiques :

- public static synchronized FileSystemManager getManager()

Cette méthode est en fait un pattern singleton permettant d'obtenir une implémentation par défaut d'un FileSystemManager. Cette implémentation par défaut permet de gérer tous les systèmes de fichiers présentés ci-dessus, pourvu que l'on possède les différentes bibliothèques supplémentaires présentées dans le tableau ci-dessous.

API Requise pour
Commons Logging (VFS) Obligatoire
Commons Net FTP
Commons HTTPClient HTTP
Slide WebDav
JCIFS CIFS
JSch SFTP

 

- private static FileSystemManager createManager(final String managerClassName)

Cette méthode est un pattern factory permettant de spécifier la classe à utiliser pour construire un FileSystemManager. Cette méthode permet donc de sélectionner précisement les plugins à charger en fonction de tel ou tel service. De ce fait, cette méthode permet aussi de charger des plugins propriétaires.

Un FileSystemManager permet donc de gérer plusieurs systèmes de fichiers. Afin d'obtenir une instance de l'interface FileObject correspondant à un fichier sur un système de fichier spécifique, il existe une méthode de la classe FileSystemManager nommée :

FileObject resolveFile(String name)

Cette méthode se sert du paramètre name pour localiser le fichier. Ce paramètre doit donc contenir une information relative au système de fichier sur lequel le fichier se trouve. Cette information est donnée par la sémantique du paramètre name. Pour cela, il est nécessaire de spécifier l'URI (Uniform Ressource Identifier) complète du fichier pour que la méthode resolveFile retourne une instance de FileObject correspondant au fichier.

La liste suivante récapitule les différentes URI correspondant aux systèmes de fichiers supportées par l'API :

Système de fichier Format de l'URI
Système de fichier local file://absolute-path
FTP ftp://[username[:password]@]hostname[:port][absolute-path]
HTTP http://[username[:password]@]hostname[:port][absolute-path]
WEBDAV
webdav://[username[:password]@]hostname[:port][absolute-path]
HTTPS https://[username[:password]@]hostname[:port][absolute-path]
SFTP sftp://[username[:password]@]hostname[:port][absolute-path]
SMB smb://[username[:password]@]hostname[:port][absolute-path]
ZIP zip://zip-file-uri[!absolute-path]
JAR jar://zip-file-uri[!absolute-path]
Fichier temporaire tmp://[absolute-path]

 


Le diagramme de séquence suivant récapitule la déroulement de la séquence nécessaire à l'obtention d'une instance d'un FileObject sur lequel on applique la méthode getChildren() permettant de lister le contenu d'un répertoire :

Et voici le code associé :

// Localisation du fichier
FileSystemManager fsManager = VFS.getManager();
FileObject myFile = fsManager.resolveFile( "file://c:/temp/" );

// Liste le contenu du répertoire
FileObject[] children = myFile.getChildren();
System.println( "Contenu de " + jarFile.getName().getURI() );
for ( int i = 0; i < children.length; i++ )
{
System.println( children[ i ].getName().getBaseName() );
}

En plus de permettre une gestion des fichiers totalement indépendante du système de fichier sous-jacent, l'API VFS offre de nombreuses fonctionnalités avancées. Nous allons voir un exemple avec la recherche de fichiers.

Flavien Bach