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

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

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.