
|
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();
|
|
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++) {
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é ?
|
|
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;
java.io.FileInputStream sourceFile=null;
java.io.FileOutputStream destinationFile=null;
try {
destination.createNewFile();
sourceFile = new java.io.FileInputStream(source);
destinationFile = new java.io.FileOutputStream(destination);
byte buffer[]=new byte[512*1024];
int nbLecture;
while( (nbLecture = sourceFile.read(buffer)) != -1 ) {
destinationFile.write(buffer, 0, nbLecture);
}
resultat = true;
} catch( java.io.FileNotFoundException f ) {
} catch( java.io.IOException e ) {
} finally {
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() ) {
boolean result = source.renameTo(destination);
if( !result ) {
result = true;
result &= copier(source,destination);
result &= source.delete();
} return(result);
} else {
return(false);
}
}
|
|
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 );
}
|
|
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();
|
|
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.
|
|
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());
|
|
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
|
|
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 ?
|
|
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);
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.
|
|
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.
|
|
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{
br = new BufferedReader(
new InputStreamReader(
new FileInputStream(source),"UTF-8"));
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 ?
|
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.
|
|
|