Filtrer les fichiers d'un répertoire [Résolu] - Java - Programmation
Marsh Posté le 03-10-2006 à 10:10:26
Tu dois écrire une classe qui implémente FilenameFilter et qui accepte ce que tu cherches
Cf javadoc
http://www.google.fr/search?hl=fr& [...] ogle&meta=
Marsh Posté le 03-10-2006 à 10:16:18
Et un truc simple ça n'existe pas (peut-être avec d'autres classes) ?
C'est dingue quand même, c'est le genre de truc qui doit être utilisé dans un paquet de programmes tous les jours.
Merci, je vais essayer de comprendre comment faire ça. Je sens que je vais encore adorer le Java...
Marsh Posté le 03-10-2006 à 10:17:43
ReplyMarsh Posté le 03-10-2006 à 10:20:05
benou a écrit : avec une regexp ca prend 4 lignes à coder ... |
Sauf que le filtre sera passé en paramètre à l'éxécution.
Marsh Posté le 03-10-2006 à 10:20:45
Peanuty a écrit : Sauf que le filtre sera passé en paramètre à l'éxécution. |
ben avec une 2e regexp qui créé celle dont tu auras besoin ... (ca fait une ligne de plus du coup )
Marsh Posté le 03-10-2006 à 10:30:41
Ouais, je peux aussi redéfinir ma propre grammaire de regexp. On peut aller loin comme ça.
Franchement je ne comprends pas qu'une commande basique comme ça n'existe pas.
Enfin voilà.
Marsh Posté le 03-10-2006 à 10:35:14
c'est vraiment pas grand chose à faire, hein ...
et ca pourait exister, mais c'est consédéré comme quelque chose de spécifique ...
et ca se tient je trouve ...
Marsh Posté le 03-10-2006 à 11:47:24
1h plus tard...
J'ai enfin -presque- réussi à utiliser ce fameux Filtername "qui n'est pas grand chose à faire".
Code :
|
Code :
|
Ca tourne, sauf la conversion des regex en format Java.
sRegex = sMasque.replaceAll("*", ".++" ); => Dangling meta character '*' near index 0 à l'exécution
J'ai essayé aussi
sRegex = sMasque.replace("*", ".++" ); => replace(char,char) in java.lang.String cannot be applied to (java.lang.String,java.lang.String) à la compilation
Marsh Posté le 03-10-2006 à 11:50:31
replaceAll prend une regex en premier parametre, une string en deuxieme, donc faut excaper ton * en \\*
replace prend des char donc pas des strings
Marsh Posté le 03-10-2006 à 11:53:36
sans dire que là ton premier replaceAll sert à rien vu que tu ecrase son résultat par le 2e ...
Marsh Posté le 03-10-2006 à 14:52:26
souk a écrit : replaceAll prend une regex en premier parametre, une string en deuxieme, donc faut excaper ton * en \\* |
Ah ok, j'avais essayé avec 1 seul \.
Et j'ai ajouté le . aussi.
Citation : replace prend des char donc pas des strings |
C'était marqué des "CharSequence" dans l'API.
benou a écrit : sans dire que là ton premier replaceAll sert à rien vu que tu ecrase son résultat par le 2e ... |
Donc au final :
Code :
|
Merci.
Marsh Posté le 03-10-2006 à 17:32:45
Peanuty a écrit : C'était marqué des "CharSequence" dans l'API. |
ben tu regardes les javadocs 1.5 et tu compiles en 1.4 ou cette methode n'existe pas
Marsh Posté le 03-10-2006 à 21:00:02
ReplyMarsh Posté le 03-10-2006 à 22:31:15
Ah ben voilà.
(bon, maintenant que ça marche j'y touche plus, mais ça pourra servir à d'autres, ou pour la prochaine fois )
Marsh Posté le 03-10-2006 à 22:35:21
benou a écrit : pratique ça ... |
Oui il y a pas mal de choses intéressantes dans les jakarta commons.
Le problème que je vois avec la méthode listFiles() c'est qu'elle renvoie un tableau contenant l'ensemble des fichiers correspondants. Ca me paraît risqué dans le cas où un nombre important de fichiers correspondent au filtre.
Sinon je cherche un filtre gèrant les expressions à la Ant (où ** cherche dans tous les sous répertoires)
Marsh Posté le 03-10-2006 à 22:42:36
charly007 a écrit : Oui il y a pas mal de choses intéressantes dans les jakarta commons. |
Bon ben j'enlève le [Résolu] alors si tu veux avoir des réponses.
Marsh Posté le 03-10-2006 à 22:45:13
Peanuty a écrit : Bon ben j'enlève le [Résolu] alors si tu veux avoir des réponses. |
Non tu peux laisser , de toute manière pour ce besoin je vais devoir utiliser autre chose que listFiles à cause du problème que j'ai cité précédemment.
Marsh Posté le 03-10-2006 à 09:58:12
Hello,
je cherche à faire un truc très classique : trouver tous les fichiers d'un répertoire qui respectent un masque (bidule*.csv par exemple).
J'ai essayé d'utiliser listFiles + FilenameFilter mais je ne comprends pas la syntaxe :
=> message d'erreur = [i]java.io.FilenameFilter is abstract; cannot be instantiated
Quelqu'un peut m'aider svp ?
Message édité par Peanuty le 03-10-2006 à 22:57:50