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
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
A voir également:
- Comment ouvrir un fichier chck ?
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Comment ouvrir un fichier docx ? - Guide
- Comment ouvrir un fichier dat - Guide
- Comment réduire la taille d'un fichier - Guide
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
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 !
La confiance n'exclut pas le contrôle
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
18 déc. 2010 à 19:06