Nombre d'occurence d'une chaine de caractère dans tous les fichiers avec les entêtes spécifiés contenu dans un dossier

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 787 fois - Téléchargée 16 fois

Contenu du snippet

Le titre est assez explicite. Il s'agit d'un petit bout de code renvoyant le nombre de fois qu'une chaine de caractère est présente dans tous les fichiers qui ont le même entête qu'un de ceux spécifié dans le dossier spécifié. Il parcourt aussi tout les fichiers de tout les dossiers qui sont contenu dans le dossier spécifié.

Ce programme permet d'apprendre la manipulation des InputStreamReader et la manipulation des fichiers en lecture.

Source / Exemple :


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class FindStringInFiles
{
    public static boolean validFileExtension(final String[] fileExt, final String fileName)
    {
        for (final String ent : fileExt)
        {
            if (fileName.lastIndexOf('.') == -1)
            {
                return false;
            }
            final String fileNameTmp = fileName.substring(fileName.lastIndexOf('.'));
            if (fileNameTmp.compareTo(ent) == 0)
            {
                return true;
            }
        }
        return false;
    }

    public static Map<File, Integer> getOccurrences(final String path, final String[] fileExtensions, final String targetString)
    {
        final Map<File, Integer> resultFileNbOccurence = new HashMap<File, Integer>();
        
        int nbOccurence = 0;
        File dir = new File(path);
        for (File file : dir.listFiles())
        {
            if (!file.isDirectory())
            {
                if (validFileExtension(fileExtensions, file.getName()))
                {
                    System.out.println("Look into file : " + file.getName());
                    InputStream ips = null;
                    InputStreamReader ipsr = null;
                    BufferedReader br = null;
                    try
                    {
                        ips = new FileInputStream(file);
                        ipsr = new InputStreamReader(ips);
                        br = new BufferedReader(ipsr);
                        String ligne;
                        while ((ligne = br.readLine()) != null)
                        {
                            if (ligne.contains(targetString))
                            {
                                nbOccurence++;
                            }
                        }
                        if (nbOccurence > 0)
                        {
                            resultFileNbOccurence.put(file, new Integer(nbOccurence));
                        }
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                        System.out.println("Error while processing file: "+file.getName()+". Exception msg: "+e.getMessage());
                    }
                    finally
                    {
                        try
                        {
                            if (br != null)
                            {
                                br.close();
                            }
                            if (ipsr != null)
                            {
                                ipsr.close();
                            }
                            if (ips != null)
                            {
                                ips.close();
                            }
                        }
                        catch (Exception e1)
                        {
                            // ignore
                        }
                    }
                }
            }
            else
            {
                resultFileNbOccurence.putAll(getOccurrences(file.getAbsolutePath(), fileExtensions, targetString));
            }
        }
        return resultFileNbOccurence;
    }

    public static void main(String[] args)
    {
        final String path = "./src";
        final String[] fileExtensions = { ".java", ".properties", ".xml" };
        final String searchString = "stz";
        
        System.out.println("Start looking for ["+searchString+"] in files with extension: ["+fileExtensions+"] - from path: "+path);
        
        final Map<File, Integer> result = getOccurrences(path, fileExtensions, searchString);
        int totalNbOccurrences = 0;
        for (Integer nbOccurencePerFile : result.values())
        {
            totalNbOccurrences += nbOccurencePerFile.intValue();
        }
        
        System.out.println(totalNbOccurrences + " occurence(s) of "+searchString+" found in files with extension: ["+fileExtensions+"] - from path: "+path);
        System.out.println(result.size()+" files found: "+result.keySet());
    }

}

Conclusion :


Have fun !

A voir également

Ajouter un commentaire

Commentaires

deadhand
Messages postés
159
Date d'inscription
dimanche 15 octobre 2006
Statut
Membre
Dernière intervention
27 août 2010
4 -
Thanks ! I completly forget this !
cs_simonreno
Messages postés
3
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
20 janvier 2010
-
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class FindStringInFiles
{
    public static boolean validFileExtension(final String[] fileExt, final String fileName)
    {
        for (final String ent : fileExt)
        {
            if (fileName.lastIndexOf('.') == -1)
            {
                return false;
            }
            final String fileNameTmp = fileName.substring(fileName.lastIndexOf('.'));
            if (fileNameTmp.compareTo(ent) == 0)
            {
                return true;
            }
        }
        return false;
    }

    public static Map<File, Integer> getOccurrences(final String path, final String[] fileExtensions, final String targetString)
    {
        final Map<File, Integer> resultFileNbOccurence = new HashMap<File, Integer>();
        
        int nbOccurence = 0;
        File dir = new File(path);
        for (File file : dir.listFiles())
        {
            if (!file.isDirectory())
            {
                if (validFileExtension(fileExtensions, file.getName()))
                {
                    System.out.println("Look into file : " + file.getName());
                    InputStream ips = null;
                    InputStreamReader ipsr = null;
                    BufferedReader br = null;
                    try
                    {
                        ips = new FileInputStream(file);
                        ipsr = new InputStreamReader(ips);
                        br = new BufferedReader(ipsr);
                        String ligne;
                        while ((ligne = br.readLine()) != null)
                        {
                            if (ligne.contains(targetString))
                            {
                                nbOccurence++;
                            }
                        }
                        if (nbOccurence > 0)
                        {
                            resultFileNbOccurence.put(file, new Integer(nbOccurence));
                        }
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                        System.out.println("Error while processing file: "+file.getName()+". Exception msg: "+e.getMessage());
                    }
                    finally
                    {
                        try
                        {
                            if (br != null)
                            {
                                br.close();
                            }
                            if (ipsr != null)
                            {
                                ipsr.close();
                            }
                            if (ips != null)
                            {
                                ips.close();
                            }
                        }
                        catch (Exception e1)
                        {
                            // ignore
                        }
                    }
                }
            }
            else
            {
                resultFileNbOccurence.putAll(getOccurrences(file.getAbsolutePath(), fileExtensions, targetString));
            }
        }
        return resultFileNbOccurence;
    }

    public static void main(String[] args)
    {
        final String path = "./src";
        final String[] fileExtensions = { ".java", ".properties", ".xml" };
        final String searchString = "stz";
        
        System.out.println("Start looking for ["+searchString+"] in files with extension: ["+fileExtensions+"] - from path: "+path);
        
        final Map<File, Integer> result = getOccurrences(path, fileExtensions, searchString);
        int totalNbOccurrences = 0;
        for (Integer nbOccurencePerFile : result.values())
        {
            totalNbOccurrences += nbOccurencePerFile.intValue();
        }
        
        System.out.println(totalNbOccurrences + " occurence(s) of "+searchString+" found in files with extension: ["+fileExtensions+"] - from path: "+path);
        System.out.println(result.size()+" files found: "+result.keySet());
    }

}
cs_simonreno
Messages postés
3
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
20 janvier 2010
-
great, just a few changes are required to output list of files, instead of a number, where string occurences have been found.
Else, think about closing the input stream and buffer reader to prevent from files lock.
Greatings

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.