Bonjour à vous développeurs.
Cela fait déjà quelques heures que je parcours forum et une partie, certes très restreinte, de ma matière grise, pour trouver d'ou vient mon problème.
Les faits :
Je parcours une arborescence et je stock les objet File dans un arrayList, jusque là tout fonctionne bien. Ensuite, j'aimerai faire une recherche d'un nom de fichier et pour faire cela j'utilise la méthode monFile.list(new Filtre(stringRechercher)).
le code qui parcour mon tableau :
La classe qui crée le filtre (patterne) pour le filtre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public ArrayList filtre(){ Iterator i = liste.iterator(); File f; String[] testTmp = null; //System.out.println("p"+fndFichier); while ( i.hasNext()){ <div style="margin-left:40px"> f = (File) i.next();</div><div style="margin-left:40px"> System.out.println(f);</div><div style="margin-left:40px"> testTmp = f.list(new Filtre(fndFichier));</div><div style="margin-left:40px"> System.out.println(testTmp);</div>} return listeTriee;
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 class Filtre implements FilenameFilter { /** La pattern regexp correspondant aux meta-caractères */ private final Pattern pattern; /** * Constructeur. * @param term La chaine représentant le masque de nom de fichier. */ public Filtre(String fileMask) { // Ajoute de \Q \E autour de la chaine : String regexpPattern = Quote.quote(fileMask); //System.out.println(regexpPattern); // On remplace toutes les occurences de '*' afin de les interpréter : regexpPattern = regexpPattern.replaceAll("\\*", "\\\\E.*\\\\Q"); //System.out.println(regexpPattern); // On remplace toutes les occurences de '?' afin de les interpréter : regexpPattern = regexpPattern.replaceAll("\\?", "\\\\E.\\\\Q"); //System.out.println(regexpPattern); // On supprime tous les \Q\E inutiles : regexpPattern = regexpPattern.replaceAll("\\\\Q\\\\E", ""); //System.out.println(regexpPattern); // On crée le pattern : this.pattern = Pattern.compile(regexpPattern); //System.out.println(regexpPattern); } public boolean accept(File dir, String name) { <div style="margin-left:40px"> System.out.println(dir +"_"+ name);</div>return this.pattern.matcher(name).matches(); }
La classe Quote du fait que je ne suis pas en 5.0
Pour seul résultat en retour de mon "testTmp = f.list(new Filtre(fndFichier))" , j'ai un null
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public class Quote extends Object { public Quote(){ } public static String quote(String s) { int slashEIndex = s.indexOf("\\E"); if (slashEIndex == -1) <div style="margin-left:40px"> return "\\Q" + s + "\\E";</div>StringBuffer sb = new StringBuffer(s.length() * 2); sb.append("\\Q"); slashEIndex = 0; int current = 0; while ((slashEIndex = s.indexOf("\\E", current)) != -1) { <div style="margin-left:40px"> sb.append(s.substring(current, slashEIndex));</div><div style="margin-left:40px"> current = slashEIndex + 2;</div><div style="margin-left:40px"> sb.append("\\E\\\\E\\Q");</div>} sb.append(s.substring(current, s.length())); sb.append("\\E"); return sb.toString(); } }
J'ai tourné le propblème dans tout les sens mais je n'arrive pas à mettre la main sur l'élément qui coince.
Merci de votre aide.
Partager