Ouvrir tous les fichiers dun dossier et check

Fermé
nikossss Messages postés 19 Date d'inscription samedi 18 décembre 2010 Statut Membre Dernière intervention 19 décembre 2010 - Modifié par nikossss le 18/12/2010 à 15:20
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 21 déc. 2010 à 10:21
Bonjour,

En la période de noël j'espère une aide qui m'aiderai énormément.
Je ne sais pas si c'est la partie appropriée.

Voilà j'explique. J'ai un dossier, dedans des fichiers .ini . Ces fichiers ont 4 données dedans, présenté sous cette forme :
Pass=
Age=
Code=
Id=


J'aimerai connaître s'il existe un programme modifiable qui pourrait :

- Ouvrir le dossier
- Ouvrir tous les fichiers et check si le code est = 1 et l'id < 6
- Si le code est = 1 et l'id < 6 alors delete ce fichier.

Je ne m'y connaît pas vraiment mais avec une base ou un exemple je pourrais travailler dessus. Merci

20 réponses

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
Modifié par KX le 18/12/2010 à 19:05
Voici un code Java qui devrait faire ce que tu veux (je l'ai testé mais il peut rester des cas particuliers non-traités)

Chaque classe Java doit être enregistrée dans un fichier portant le nom de la classe dans un même dossier. Il faudra ensuite les compiler !

// Champ.java

/**
 * Représente une ligne d'un fichier de configuration et sa valeur associée
 * @author KX
 */
public class Champ
{
    /** L'identifiant de la ligne, par exemple : "Id=" */
    public String matcher;
    /** La valeur associée à l'identifiant */
    public String valeur;
    
    /**
     * Créé le champ avec la valeur "" par défaut
     * @param matcher le préfixe qui identifie la ligne 
     */
    public Champ(String matcher)
    {
        this.matcher=matcher;
        this.valeur="";
    }
}

// Informations.java

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * Représente la succession de plusieurs champs d'un fichier de configuration
 * @author KX
 */
public class Informations extends ArrayList<Champ>
{
    private static final long serialVersionUID = 1L;

    /**
     * Valeurs des premiers champs d'un fichier
     * @param matcher les champs dans l'ordre où ils apparaissent dans le fichier (un par ligne)
     */
    public Informations(String...matcher)
    {
        clear();
        for (int i=0; i<matcher.length; i++)
            add(new Champ(matcher[i]));
    }
    
    /**
     * Pour chaque champ du fichier, on lit sa valeur.
     * @param fichier le fichier de configuration dont on lit les valeurs
     * @return true si tous les champs ont été trouvés, false sinon
     */
    public boolean lireValeurs(File fichier) 
    {
        Scanner sc;
        try
        {
            sc = new Scanner(fichier); // ouverture du fichier
        }
        catch (FileNotFoundException e)
        {
            return false;
        }
                
        for (int i=0; i<size(); i++)
        {
            if (!sc.hasNextLine())
                return false; // le fichier ne contient pas assez de champs
            
            String s=sc.nextLine(); // lecture de la ligne
            
            if (!s.startsWith(get(i).matcher))
                return false; // la ligne ne correspond pas au champ attendu
            
            get(i).valeur=s.replaceFirst(get(i).matcher,""); // on attribue la valeur au champ
        }
        
        sc.close(); // on ferme le fichier        
        return true;
    }
}

// Analyse.java

import java.io.File;
import java.util.ArrayList;

/**
 * Analyse un dossier et récupère tous les fichiers qui satisfont à la recherche
 * @author KX
 */
public class Analyse extends ArrayList<File>
{
    private static final long serialVersionUID = 1L;
    
    /**
     * Vérification de l'extension d'un fichier
     * @param fichier le fichier sur lequel on fait la vérification
     * @param extensions les extensions pour lesquelles le fichier doit être accepté
     * @return true si le fichier a l'une des extensions cherchées, false sinon
     */
    private boolean bonneExtension(File fichier,String...extensions)
    {
        String s1=fichier.getName();
        String s2=s1.substring(s1.lastIndexOf(".")+1,s1.length()); // l'extension du fichier
        for (String e : extensions) // on parcourt les différentes extensions
            if (e.equals(s2))
                    return true; // s'il y a coïncidence, c'est bon.
        return false;
    }
    
    /**
     * Recherche si un fichier doit être accepté par l'analyse
     * Dans notre cas, code est le troisième champ et doit valoir 1
     * id est le quatrième champ et doit être inférieur à 6
     * @param fichier le fichier considéré
     * @param inf les premiers champs que contient le fichier
     * @return true si le fichier contient bien les éléments de la recherche, false sinon
     */
    public boolean recherche(File fichier, Informations inf)
    {
        if (!inf.lireValeurs(fichier)) 
            return false; // le fichier n'a pas tous les champs
        try
        {
            int code = Integer.parseInt(inf.get(2).valeur);
            int id = Integer.parseInt(inf.get(3).valeur);
            return code==1 && id<6; // la recherche est correcte
        }
        catch (Exception e) 
        {
            return false; // les valeurs n'étaient pas entières ou inf ne contenait pas suffisamment de champs
        }
    }
    
    /**
     * Parcours un dossier pour relever tous les fichiers qui satisfont à la recherche
     * @param nomDossier le dossier où se trouve les fichiers
     * @param inf les différents champs qui doivent être utilisés pour la recherche
     * @param extensions les différentes extensions que peuvent prendre un fichier à analyser
     */
    public Analyse(String nomDossier, Informations inf, String...extensions)
    {
        clear();
        
        File dossier=new File(nomDossier);
        if (!dossier.isDirectory()) // si le dossier n'en est pas un, on ne fait rien
        {
            System.err.println(dossier.getAbsolutePath()+" n'est pas un dossier");
            return;
        }
        
        File[] liste=dossier.listFiles(); // liste de tous les fichiers du dossier
        
        for (File f:liste) // on parcourt un à un les fichiers
        {
            if (f.isFile() && f.canRead() && bonneExtension(f,extensions))
            {
                if (recherche(f,inf)) // si le fichier satisfait à la recherche, on l'ajoute
                    add(f);
            }
        }        
    }
    
    /**
     * Supprime tous les fichiers préalablement analysés comme satisfaisant à la recherche
     * Attention : les fichiers ne sont pas envoyés à la corbeille, mais directement effacés
     */
    public void supprimerTout()
    {
        for (File f: this)
        {
            if (!f.delete())
                System.err.println(f.getAbsolutePath()+" n'a pas pu être supprimé");
        }
    }
}

// Main.java

import java.io.File;
import java.util.Scanner;

/**
 * Classe principale
 * @author KX
 */
public class Main 
{
    /**
     * 1) Demande un nom de dossier à l'utilisateur
     * 2) Analyse le dossier
     * 3) Affiche les résultats de l'analyse et demande confirmation
     * 4) Supprime si l'utilisateur a confirmé
     */
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("Chemin d'accès au dossier : ");
        String s=sc.nextLine();
        
        Informations inf=new Informations("Pass=","Age=","Code=","Id=");
        Analyse a = new Analyse(s, inf, "ini");
        
        System.out.println(a.size()+" fichiers prêts à être supprimés : ");
        for (File f: a)
        {
            System.out.println(f.getAbsolutePath()); // on affiche les fichiers prêts à être supprimés
        }
        
        System.out.println("Confirmer la suppression ? (O/n)");
        if (sc.nextLine().charAt(0)=='O')
            a.supprimerTout();
    }
}

La confiance n'exclut pas le contrôle
2
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
18 déc. 2010 à 19:06
J'ai rajouté des commentaires au code pour pouvoir comprendre ce que je fais et modifier le programme selon tes propres besoins.
0