Accueil
Accueil
Le
Club
Delphi
Kylix
C
C++
Java
J2EE
DotNET
& C#
Visual
Basic
Access
Pascal
Dev
Web
PHP
ASP
XML
UML
SQL
SGBD
Win
Linux
Autres



Comment connaître les racines des arborescences de fichiers ?
auteur : Clément Cunin
La classe java.io.File fournit la méthode statique listRoots(). Sous Windows, le résultat est la liste des lecteurs logiques ( a:/, c:/, d:/ ), sous Unix, le résultat se limite à la seule racine système.

File[] listeRacine = File.listRoots();

Comment parcourir une arborescence de fichiers ?
auteur : Clément Cunin
Pour obtenir la liste des fichiers d'un répertoire :

/** Class : java.io.File */ public File [] listFiles ();
Pour connaître le type d'un fichier :

/** Class : java.io.File */ public boolean isDirectory (); public boolean isFile ();
Exemple :
Cet exemple effectue un parcours récursif d'une arborescence de fichiers et affiche (sur la sortie standard) la liste de tous les fichiers contenus dans le répertoire et ses sous-répertoires.

public static void listeRepertoire ( File repertoire ) { System.out.println ( repertoire.getAbsolutePath()); if ( repertoire.isDirectory ( ) ) { File[] list = repertoire.listFiles(); for ( int i = 0; i < list.length; i++) { // Appel récursif sur les sous-répertoires listeRepertoire( list[i]); } } }
Attention : cet algorithme ne fonctionne pas correctement avec une arborescence cyclique sous Unix !

lien : Comment connaître les racines des arborescences de fichiers ?
lien : Comment indiquer la position d'un fichier en conservant la portabilité ?

Comment copier ou déplacer un fichier ?
auteur : Clément Cunin
Copie de fichier :
L'Api ne fournissant pas de solution clé en main pour la copie de fichier, voila un bout de code qui devrait fonctionner.


/** copie le fichier source dans le fichier resultat * retourne vrai si cela réussit */ public static boolean copier( File source, File destination ) { boolean resultat = false; // Declaration des flux java.io.FileInputStream sourceFile=null; java.io.FileOutputStream destinationFile=null; try { // Création du fichier : destination.createNewFile(); // Ouverture des flux sourceFile = new java.io.FileInputStream(source); destinationFile = new java.io.FileOutputStream(destination); // Lecture par segment de 0.5Mo byte buffer[]=new byte[512*1024]; int nbLecture; while( (nbLecture = sourceFile.read(buffer)) != -1 ) { destinationFile.write(buffer, 0, nbLecture); } // Copie réussie resultat = true; } catch( java.io.FileNotFoundException f ) { } catch( java.io.IOException e ) { } finally { // Quoi qu'il arrive, on ferme les flux try { sourceFile.close(); } catch(Exception e) { } try { destinationFile.close(); } catch(Exception e) { } } return( resultat ); }
Déplacer un fichier
On n'a vu que le déplacement d'un fichier pouvait être fait grâce à la méthode renameTo(java.io.File) de la classe java.io.File ( voir ici ) Mais cette solution n'est valable que pour des déplacements à l'intérieur d'un disque physique...
On va donc utilisé l'algorithme de copie lorsque le renommage ne suffit pas :

public static boolean deplacer(File source,File destination) { if( !destination.existe() ) { // On essaye avec renameTo boolean result = source.renameTo(destination); if( !result ) { // On essaye de copier result = true; result &= copier(source,destination); result &= source.delete(); } return(result); } else { // Si le fichier destination existe, on annule ... return(false); } }

Comment supprimer un fichier ou un répertoire ?
auteur : Clément Cunin
Supprimer un fichier ou un répertoire vide :
La suppression des fichiers et des répertoires vides est effectuée grâce à la méthode delete() de la classe java.io.File. Un booléen en résultat indique si la suppression a réussi (cause d'échec : Fichier inexistant; Fichier en lecture seule; Le fichier est ouvert par une application ou par le système; Flux ouvert sur le fichier; etc...).

Supprimer un répertoire non-vide :
L'Api de base ne permet pas de supprimer un répertoire contenant des fichiers, il faut donc supprimer à la main tous les fichiers du répertoire avant !

static public boolean deleteDirectory(File path) { boolean resultat = true; if( path.exists() ) { File[] files = path.listFiles(); for(int i=0; i<files.length; i++) { if(files[i].isDirectory()) { resultat &= deleteDirectory(files[i]); } else { resultat &= files[i].delete(); } } } resultat &= path.delete(); return( resultat ); }

Comment renommer/déplacer un fichier ?
auteur : Clément Cunin
La méthode renameTo(java.io.File) de la classe java.io.File permet très facilement de renommer un fichier. De plus, si le répertoire destination est différent du répertoire source, le fichier sera déplacé. (ATTENTION : le déplacement n'est effectué que si la source et la destination sont sur le même disque physique, sinon une copie de fichier est nécessaire)

File source = new File("mon fichier"); File destination = new File("mon fichier renommé"); source.renameTo(destination);
lien : Comment indiquer la position d'un fichier en conservant la portabilité ?
lien : Comment copier ou déplacer un fichier ?

Comment créer un fichier temporaire ?
auteur : Clément Cunin
Un fichier temporaire est un fichier qui sera créé dans le répertoire temporaire du système et qui sera automatiquement supprimé à la fin de l'application (si la JVM quitte correctement).

File temp = File.createTempFile("nom",".tmp"); temp.deleteOnExit();

Comment connaître le type MIME d'un fichier ?
auteur : Ioan Calapodescu
Cette information peut être accessible grâce à la classe URLConnection du package java.net Par exemple :

public static String getMIMEType(File file){ if(file.isDirectory()){return "repertoire";} if(!file.exists()){return "fichier inexistant";} try{ URL url = file.toURL(); URLConnection connection = url.openConnection(); return connection.getContentType(); }catch(MalformedURLException mue){ return mue.getMessage(); }catch(IOException ioe){ return ioe.getMessage(); } }
Pour plus de "sécurité", vous pouvez utiliser la méthode statique guessContentTypeFromStream. A la différence de getContentType (ou guessContentTypeFromName) cette méthode essaye de déterminer le type MIME en lisant directement les premiers bytes de l'InputStream.


Comment connaître la date de création d'un fichier ?
auteur : L'équipe Java
Date de création :
Aucune solution n'est disponible pour connaître la date de création d'un fichier. Certains systèmes comme Linux ne fournissant pas cette information, aucun solution portable n'est possible.

Date de la dernière modification :
Là, en revanche, aucun problème, la méthode lastModified() de la classe java.io.File est disponible.

Date dateModification = new Date(monFichier.lastModified());

Comment connaître l'espace libre d'un disque ?
auteur : Clément Cunin
Aucune solution n'est pleinement portable, donc aucune solution pure Java.

JConfig
JConfig est une bibliothèque supplémentaire qui est lié à du code natif disponible pour plusieurs plateformes. Elle permet d'accéder à cette information, ainsi que beaucoup d'autre choses. http://www.tolstoy.com/samizdat/jconfig.html


Comment indiquer la position d'un fichier en conservant la portabilité ?
auteur : Clément Cunin
Les différents systèmes d'exploitation ne gèrent pas les arborescences de fichier de la même façon. Le monde Windows associe les périphériques physiques à des lettres de lecteur, le monde Unix utilise un seul répertoire racine. De plus, les séparateurs de fichier ne sont pas les mêmes (respectivement '\' et '/'). Tout ceci doit être analysé afin d'assurer la portabilité de l'application. Heureusement Java fournit tous les outils pour localiser efficacement les fichiers en gardant toute l'indépendance vis à vis du système d'exploitation.

Le plus important est de ne jamais utiliser directement de séparateur de fichier mais d'utiliser la constante définie en fonction du système dans la classe java.io.File.

/** Class : java.io.File */ public static final char separatorChar;
Si vous désirez exprimer une liste de fichiers, il convient également d'utiliser la constante prévue à cet effet.

/** Class : java.io.File */ public static final char pathSeparatorChar;
lien : Comment parcourir une arborescence de fichiers ?

Comment lire des informations sur l'entrée standard ?
auteur : Clément Cunin
L'entrée standard est accessible au programmeur grâce au flux 'in' de la classe java.lang.System. Si vous exécutez votre application dans une console, l'entrée standard contiendra tous les caractères entrés au clavier dans la console. La manipulation directe du flux n'étant pas très aisée, une petite conversion en java.io.BufferedReader s'impose.

/** Convertion du flux en BufferedReader */ BufferedReader entree = new BufferedReader(new InputStreamReader(System.in)); try { /** Lecture d'une ligne : */entree.readline(); } catch( IOException e ) { e.printStackTrace(); }
Note : La lecture d'une ligne est une méthode dite 'blocante', tant que l'utilisateur n'a pas fait 'entrée', le processus attends.

Depuis J2SE 5.0 (Tiger) vous pouvez aussi utiliser un Scanner pour parser la sortie standard. Par exemple :

Scanner scanner = new Scanner(System.in); // traitement scanner.close();
Le Scanner a l'avantage de possèder un ensemble de méthodes permettant de lire "directement" les types primitifs. Vous pouvez aussi l'utiliser pour faire des recherches dans les flux scannés avec des expressions régulières.


Comment charger une ressource présente dans le CLASSPATH (répertoire ou jar) ?
auteur : bulbo
Pour faire cela, il faut utiliser les méthodes getResource et getResourceAsStream de la classe Class. Le chemin à passer en argument est celui commençant dans le répertoire du CLASSPATH ou a la racine d'un fichier jar. Attention si le chemin ne commence pas par "/" alors le package courant est ajouté au début du chemin. Exemple:

package com.developpez; public class Test { public Test() { InputStream is1 = getClass().getResourceAsStream("fichier.txt"); InputStream is2 = getClass().getResourceAsStream("/fichier.txt"); } }
Dans le code de l'exemple is1 sera un InputStream ouvert sur un fichier "com/developpez/fichier.txt" présent dans un des répertoires du CLASSPATH ou dans la même arborescence à partir de la racine d'un fichier jar du CLASSPATH. is2 sera un InputStream ouvert sur un fichier "fichier.txt" présent directement dans un répertoire du CLASSPATH ou a la racine d'un fichier jar.


Comment changer l'encodage d'un fichier texte ?
auteur : Ioan Calapodescu
On peut spécifier l'encodage utilisé pour lire un flux. Voici un exemple qui lis un fichier en UTF-8 et écris celui-ci en ISO-8859-1 :

public static void toISO(String source, String destination){ BufferedReader br = null; PrintWriter pw = null; try{ //flux de lecture en UTF-8 br = new BufferedReader( new InputStreamReader( new FileInputStream(source),"UTF-8")); //flux d'écriture en ISO (valeur par défaut) pw = new PrintWriter(new FileOutputStream(destination)); String ligne; while((ligne = br.readLine())!=null){ pw.println(ligne); } }catch(Exception e){e.printStackTrace();} finally{ try { pw.close(); } catch( Throwable e ) {} try { br.close(); } catch( Throwable e ) {} } }
lien : Comment changer l'encodage d'une chaîne de caractères ?

Comment connaître les Charset disponibles et leurs alias ?
auteur : Ioan Calapodescu
La classe java.nio.Charset nous permet de facilement accèder à ces informations.

Voici un exemple listant l'ensemble des charsets disponibles :

SortedMap<String,Charset> charsets = Charset.availableCharsets(); for(String nom : charsets.keySet()){ System.out.println("Charset "+nom); Charset charset = charsets.get(nom); for(String alias : charset.aliases()){ System.out.print(" "+alias+","); } System.out.println(); }
lien : Comment changer l'encodage d'un fichier texte ?
lien : Comment changer l'encodage d'une chaîne de caractères ?

Peut-on modifier l'encodage de la sortie standard ?
auteur : Ioan Calapodescu
Oui, cela est possible. Ceci peut être utile par exemple pour afficher corectement les caractères accentués.

Voici un exemple permettant d'écrire correctement les caractères accentués sur la console windows (DOS) :

PrintStream ps = new PrintStream(System.out,true,"IBM850"); // on commence par changer l'encodage en IBM850 (connu aussi sous l'alias Cp850) System.setOut(ps); // ensuite l'utilisation de la sortie standard reste la même System.out.println("àâäÂÄéèêëîïÎÏÊËôöÔÖûüùÛÜÿç");
lien : Comment changer l'encodage d'une chaîne de caractères ?
lien : Comment changer l'encodage d'un fichier texte ?
lien : Comment connaître les Charset disponibles et leurs alias ?


Consultez les autres F.A.Q's

Les codes sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits d'auteurs.

Ce document issu de http://www.developpez.com est soumis à deux licences, en fonction des contributeurs :

- Les contributions de Clément Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies des contributions de Clément Cunin et Johann Heymes tant que cette note apparaît clairement :
"Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement".

- Pour ce qui est des autres contributions : Copyright © 2004 Developpez LLC : Tous droits réservés Developpez LLC. Aucune reproduction, ne peux en être faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright 2000..2004 www.developpez.com