La classe java.io.File permet de parcourir le système de fichiers de n'importe quelle pla pateforme.
Il est nécessaire soit d'indiquer au compilateur que les méthodes de la classe File sont susceptibles de lancer des exceptions d'entrées/sorties (throws), soit de mettre en place un dispositif capable d'effectuer un traitement approprié (try... catch...).
import java.io.*; public class GestionFichier { public static void main(String[] args) throws IOException { File oChemin = new File(); } }
L'instanciation de cette classe représente un chemin abstrait vers un fichier ou un répertoire. A partir de ce chemin, l'objet est capable d'accéder à tous les fichiers et répertoires environnant. C'est-à-dire, que l'objet File peut remonter aux parents (File getParentFile(), String getParent()) jusqu'aux noeuds racines (static File[] listRoots()), à ses frères (File[] getParentFile().listFiles(), string[] getParentFile().list()) et descendre à ses enfants (File[] listFiles(), String[] list()).
import java.io.*; public class GestionFichier { public static void main(String[] args) throws IOException { File[] noeudsRacines = File.listRoots(); for(int i = 0; i < noeudsRacines.length; i++){ String[] oChemin = noeudsRacines[i].list(); System.out.println(noeudsRacines[i]); if(oChemin != null){ for(int j = 0; j < oChemin.length; j++){ System.out.println("\t" + oChemin[j]); } } } } }
Cet objet peut également fournir des informations à son propos, telles que le nom ou le répertoire désigné par l'instance (getName()), le chemin (String getPath()) absolue (String getAbsolutePath()) ou canonique (String getCanonicalPath()), la date de dernière modification (long lastModified()), ainsi que la taille du fichier (long length()).
import java.io.*; import java.util.*; public class GestionFichier { public static void main(String[] args) throws IOException { String chemin = "C:\\java\\projets\\exemple1\\GestionFichier.class"; File oChemin = new File(chemin); File[] oCollection = oChemin.getParentFile().listFiles(); for(int i = 0; i < oCollection.length; i++){ System.out.println("Chemin : " + oCollection[i].getPath()); System.out.println("Nom de la cible : " + oCollection[i].getName()); System.out.println("Chemin absolu : " + oCollection[i].getAbsolutePath()); System.out.println("Taille du fichier : " + oCollection[i].length()); System.out.println("Dernière modification : " + new Date(oCollection[i].lastModified())); } } }
Egalement, des indications sur la cible de l'objet peuvent être livrées par l'intermédiaire de méthodes. De cette manière, il est possible de vérifier si le chemin abstrait existe sur la plateforme sous-jacente (boolean exists()), désigne un fichier (boolean isFile()) ou un répertoire (boolean isDirectory()), ou s'il est caché (isHidden()), si une application peut y lire (boolean canRead()) ou y écrire (boolean canWrite()) ou encore si le chemin est absolu (isAbsolute()).
import java.io.*; public class GestionFichier { public static void main(String[] args){ try{ File[] noeudsRacines = File.listRoots(); afficheContenuRepertoire(noeudsRacines); } catch(Exception e){ System.out.println("Une erreur s'est produite dans main()!"); } } public static void afficheContenuRepertoire(File[] repertoire){ try{ if(repertoire != null){ for(int i = 0; i < repertoire.length; i++){ if(repertoire[i].exists()){ File[] oChemin = repertoire[i].listFiles(); System.out.println (repertoire[i] + "\t racine"); for (int j = 0; j < oChemin.length; j++){ if(oChemin[j].isDirectory()){ System.out.println (oChemin[j].getName() + "\t\trepertoire"); } else{ System.out.print("\t" + oChemin[j].getName()); System.out.print("\t" + (oChemin[j].isFile() ? "fichier" : "")); System.out.print("\t" + (oChemin[j].isHidden() ? "cache" : "")); System.out.println("\t" + oChemin[j].length() + " octets"); } } } } } } catch(Exception e){ System.out.println("Une erreur s'est produite " + "afficheContenuRepertoire() !"); } } }
D'autre part, un objet File est capable de créer un nouveau fichier (boolean createNewFile()) ou un répertoire (boolean mkdir(), boolean mkdirs()) et d'effacer un fichier ou un répertoire (boolean delete()).
import java.io.*; public class GestionFichier { public static void main(String[] args){ try{ if(args.length > 0){ String arborescence = args[0]; File repertoire = new File(arborescence); if(!repertoire.exists()){ repertoire.mkdirs(); System.out.println(arborescence.toString() + " cree..."); } } } catch(Exception e){ System.out.println ("Un problème s'est produit " + "dans la méthode main() !"); } } }
Dans la classe File, plusieurs autres méthodes sont disponibles pour effectuer notamment des comparaisons entre chemins abstraits (boolean equals(), boolean compareTo()), un renommage de la cible de l'objet File (boolean renameTo(File fic)) ou encore la conversion de ce dernier en URI (URI toURI()) ou en URL (URL toURL()).
import java.io.*; import java.net.*; public class GestionFichier { public static void main(String[] args){ try{ File oChemin = new File("index.html"); File nouveauChemin = new File("accueil.html"); boolean resultat = oChemin.renameTo(nouveauChemin); URL adr_url = oChemin.toURL(); URI adr_uri = nouveauChemin.toURI(); System.out.println (oChemin.getPath() + "\n" + nouveauChemin.getPath() + "\n" + adr_url.toString() + "\n" + adr_uri.toString()); } catch(Exception e){ System.out.println ("Un problème s'est produit " + "dans la méthode main() !"); } } }