Lire tous les fichiers TXT d'un répertoire et copier sur un seul fichier TXT [Résolu]

Messages postés
24
Date d'inscription
mardi 21 novembre 2006
Dernière intervention
15 mars 2011
- - Dernière réponse :  kadi - 10 févr. 2014 à 05:45
Bonjour à tous,

je suis débutant en java et je recherche un code pour lire le contenu de tous les fichiers .txt présents dans un répetoire puis de copier le contenu de tous les fichiers sur un seul fichier.

D'après mes recherches, j'arrive à lire des fichiers qui sont présents dans un répertoire puis copier leur contenu dans un autre fichier. Mais je suis obligé de spécifier le nom des fichiers à chaque fois.

Comment faire pour éviter de spécifier le nom des fichiers, il doit y avoir une fonction qui permet de lire tous les fichier à l'extension txt et de copier sur un autre fichier.

voici mon code trouvé avec Google mais je crois que c'est une manière pas très élégante car je l'ai modifié un peu.

import java.io.*;

class FileStreamsTest {
    public static void main(String[] args) {
        try {
            File inputFile = new File("Text1.txt");
            File inputFile2 = new File("Text2.txt");
            File inputFile3 = new File("Text3.txt");

            File outputFile = new File("TextOutput.txt");

            FileInputStream fis = new FileInputStream(inputFile);
            FileInputStream fis2 = new FileInputStream(inputFile2);
            FileInputStream fis3 = new FileInputStream(inputFile3);

            FileOutputStream fos = new FileOutputStream(outputFile);
            int c;
            int b;
            int a;

            while ((c = fis.read()) != -1)
            {
               fos.write(c);
            }

            while ((b = fis2.read()) !=-1)


            { fos.write(b);
            }


            while ((a = fis3.read()) !=-1)
            {
                fos.write(a);
            }


            fis.close();
            fis2.close();
            fis3.close();
            fos.close();
        } catch (FileNotFoundException e) {
            System.err.println("FileStreamsTest: " + e);
        } catch (IOException e) {
            System.err.println("FileStreamsTest: " + e);
        }
    }
}



Merci à tous
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
699
Date d'inscription
mercredi 19 février 2003
Dernière intervention
13 mai 2011
5
Merci
Salut,

Pour retrouver la liste des fichiers .txt d'un répertoire (en considérant la possibilité qu'il y ait des sous répertoires), tu peux utiliser la méthode listFiles() de l'objet java File qui va lister les différents fichiers contenus dans un répertoire.

Cette méthode peut prendre en paramètre un FileFilter pour filter la liste retournée.
Dans ton cas, ce FileFilter va retourner true seulement si le nom du fichier se termine par .txt

Voici un example de méthode récursive qui prend en paramètre le nom du répertoire pour lequel la liste est souhaitée, un object Collection pour stocker les fichiers, et l'extension de fichier.

//Methode qui permet de parser un repertoire et de retrouver ses fichiers
private static void findFilesRecursively(File file, Collection<File> all, final String extension) {
    //Liste des fichiers correspondant a l'extension souhaitee
    final File[] children = file.listFiles(new FileFilter() {
    	public boolean accept(File f) {
                return f.getName().endsWith(extension) ;
            }}
    );
    if (children != null) {
        //Pour chaque fichier recupere, on appelle a nouveau la methode
        for (File child : children) {
            all.add(child);
            findFilesRecursively(child, all, extension);
        }
    }
}


Et dans la méthode main, tout simplement une loop sur les fichiers récupérés, ce qui allège le code (a remplacer le nom du répertoire dans lequel se situent les fichiers textes bien sur) :

public static void main(String[] args) {
try {
    final Collection<File> all = new ArrayList<File>();
    findFilesRecursively(new File("C:\\repertoire"), all, ".txt");

    File outputFile = new File("TextOutput.txt");
    FileOutputStream fos = new FileOutputStream(outputFile);

    for (File file : all) {
    	System.out.println(file.getName());
    	FileInputStream fis = new FileInputStream(file);
    	int a;
    	while ((a = fis.read()) != -1) {
    		fos.write(a);
    	}
    	fis.close();
    }
    fos.close();
} catch (FileNotFoundException e) {
System.err.println("FileStreamsTest: " + e);
} catch (IOException e) {
System.err.println("FileStreamsTest: " + e);
}
}


Si jamais le code n'est pas clair, n'hésite pas à demander des clarifications :)

Fanny

Dire « Merci » 5

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

bojour
il m'affiche une erreur eu niveau de "collection"

que ce que je doit faire ?

MERCI
Commenter la réponse de HFanny
Messages postés
24
Date d'inscription
mardi 21 novembre 2006
Dernière intervention
15 mars 2011
1
Merci
Merci Fanny, j'essaie et je reviendrai vers toi.
J'aurai surement besoin d'éclaircissement.
ZEN
Commenter la réponse de PY01A0080
Messages postés
1
Date d'inscription
mardi 8 décembre 2009
Dernière intervention
22 juillet 2011
1
Merci
final Collection<File> all = new ArrayList<File>();
findFilesRecursively(new File("C:\\repertoire"), all, ".txt");


Salut Fanny, peux-tu m faire comprendre ces deux lignes, svp.
Commenter la réponse de cs_ketolass

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.