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

Résolu
PY01A0080 Messages postés 24 Date d'inscription mardi 21 novembre 2006 Statut Membre Dernière intervention 15 mars 2011 - 9 janv. 2011 à 00:40
 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

3 réponses

HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
12 janv. 2011 à 01:01
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
5
bojour
il m'affiche une erreur eu niveau de "collection"

que ce que je doit faire ?

MERCI
0
PY01A0080 Messages postés 24 Date d'inscription mardi 21 novembre 2006 Statut Membre Dernière intervention 15 mars 2011 1
12 janv. 2011 à 15:32
Merci Fanny, j'essaie et je reviendrai vers toi.
J'aurai surement besoin d'éclaircissement.
ZEN
1
cs_ketolass Messages postés 1 Date d'inscription mardi 8 décembre 2009 Statut Membre Dernière intervention 22 juillet 2011 1
22 juil. 2011 à 16:10
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.
1