Gestion des fichiers

Gestion des fichiers

La classe File

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

Instanciation

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");

Méthodes principales de la classe File

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

Lister les fichiers d'un dossier

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());
        }
}

Déplacer un fichier

Sur un même Système de fichier

File fichier = new File("D:\\dossier1\\fichier.txt");
fichier.renameTo(new File("D:\\dossier1\\dossier\\fichier.txt"));

Sur un système de fichier différent

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)

Copier un fichier

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();
                }
        }
}

Suppression d'un fichier

File fichier = new File("D:\\dossier1\\fichier.txt");
fichier.delete();

Manipulation des fichiers texte

Lire un fichier

/* 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();
        }
}

Ecrire un fichier

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();
        }
}

Ajouter une ligne à un fichier

/* 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();
                }
        }
}
A voir également
Ce document intitulé « Gestion des fichiers » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.