La classe File permet de manipuler le système de fichier (déplacement, copie, etc.) mais ne permet pas d'accéder au contenu des fichiers.
L'objet File permet de manipuler le système de fichier. File peut être soit un dossier soit un fichier, aucune distinction n'est faite entre ces deux éléments. La documentation de la classe File est ici : http://docs.oracle.com/javase/7/docs/api/java/io/File.html
Pour un système de fichier Windows
Le caractère \ étant un caractère réservé, il faut le banaliser en le doublant, on remplace donc les \ par \\
File fichier = new File("D:\\dossier\\fichier.txt"); File dossier = new File("D:\\dossier");
Pour un système de fichier unix/linux
File fichier = new File("/home/dossier/fichier.txt"); File dossier = new File("/home");
Le tableau ci-dessous liste les méthodes principales de la classe File
Méthode | Description |
---|---|
delete() | Supprime le fichier sur le système de fichiers |
deleteOnExit() | Supprime le fichiers sur le système de fichiers lors de la fermeture de la JVM |
exists() | Retourne vrai si le fichier ou le dossier existe sur le système de fichiers |
getName() | Retourne le nom du fichier ou du dossier |
getParent() | Retourne le nom du dossier parent ou null s'il n'existe pas de parent |
isDirectory() | Retourne vrai si le path associé à l'objet file est un dossier |
isFile() | Retourne vrai si le path associé à l'objet file est un fichier |
list() | Retourne un tableau de String contenant les noms des dossiers et des fichiers dans le répertoire désigné par le path |
listFiles() | Retourne un tableau de File contenant les noms des dossiers et des fichiers dans le répertoire désigné par le path |
mkdir() | Créé le répertoire désigné par le path |
mkdirs() | Créé le désigné par le path avec les répertoires parents s'ils n'existent pas |
renameTo(File destination) | Renomme ou déplace le fichier sur le système de fichier |
Pour lister les fichiers d'un répertoire, on utilise la méthode list() ou listFiles
Exemple d'utilisation de list()
Les fichiers et les dossiers de D:\dossier1 sont affichés dans la console :
File dossier = new File("D:\\dossier1"); String[] contenu = dossier.list(); System.out.println(Arrays.toString(contenu));
Exemple d'utilisation de listFiles()
Les fichiers et les dossiers de D:\dossier1 sont listés dans la console, les fichiers sont précédés de "Fichier :" et les dossiers de "Dossier :"
File dossier = new File("D:\\dossier1"); File[] contenu = dossier.listFiles(); for (File f : contenu){ if(f.isDirectory()){ System.out.println("Dossier : "+f.getName()); } else { System.out.println("Fichier : "+f.getName()); } }
File fichier = new File("D:\\dossier1\\fichier.txt"); fichier.renameTo(new File("D:\\dossier1\\dossier\\fichier.txt"));
Si le système de fichier est différent, il faut déplacer le contenu du fichier sur l'autre système de fichier. Dans ce cas, l'objet File n'est pas suffisant.
Dans ce cas, il faudra copier le fichier vers la destination et supprimer le fichier initial. (Pour la copie, voir la section suivante)
La copie d'un fichier nécéssite un accès aux données du FileSystem, la classe File ne gère pas ce fonctionnement.
FileChannel source=null; FileChannel destination=null; try { source = new FileInputStream("D:\\dossier1\\fichier.txt").getChannel(); destination = new FileOutputStream("C:\\dossier2\\f.txt").getChannel(); source.transferTo(0, source.size(), destination); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(source != null) { try { source.close(); } catch (IOException e) { e.printStackTrace(); } } if(destination != null) { try { destination.close(); } catch (IOException e) { e.printStackTrace(); } } }
File fichier = new File("D:\\dossier1\\fichier.txt"); fichier.delete();
/* Le chemin vers le fichier à lire */ String pathFichier="D:\\fichier.txt"; BufferedReader fluxEntree=null; try { /* Création du flux vers le fichier texte */ fluxEntree = new BufferedReader(new FileReader(pathFichier)); /* Lecture d'une ligne */ String ligneLue = fluxEntree.readLine(); while(ligneLue!=null){ System.out.println(ligneLue); ligneLue = fluxEntree.readLine(); } } catch(IOException exc){ exc.printStackTrace(); } finally{ try{ if(fluxEntree!=null){ /* Fermeture du flux vers le fichier */ fluxEntree.close(); } } catch(IOException e){ e.printStackTrace(); } }
PrintWriter out=null; try{ /* Path vers le fichier à créer*/ String pathFichier = "D:\\fichier.txt"; /* Ouverture du fichier en écriture */ out = new PrintWriter(new BufferedWriter(new FileWriter(pathFichier))); /* Ecriture d'une ligne puis saut de ligne */ out.println("Ligne 1"); /* Ecriture d'une ligne sans saut de ligne */ out.print("Ligne 2"); out.println(" suite de la ligne 2"); } catch(IOException exc){ exc.printStackTrace(); } finally { if(out!=null){ /* Fermeture du flux */ out.close(); } }
/* Chemin vers le fichier à modifier*/ String pathFichier = "D:\\fichier.txt"; /* Texte à ajouter */ String aAjouter = "Texte a ajouter"; FileWriter writer = null; try { /* Ouverture du fichier en écriture */ writer = new FileWriter(pathFichier, true); /* Ajout du contenu */ writer.write(aAjouter, 0, aAjouter.length()); } catch(IOException ex){ ex.printStackTrace(); } finally{ if(writer != null){ try { /* Fermeture du flux */ writer.close(); } catch (IOException e) { e.printStackTrace(); } } }