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

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

4 réponses

Meilleure réponse
HFanny 699 Messages postés mercredi 19 février 2003Date d'inscription 13 mai 2011 Dernière intervention - 12 janv. 2011 à 01:01
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

Merci HFanny 5

Avec quelques mots c'est encore mieux Ajouter un commentaire

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