Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
891 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Résolu] Filtrer les fichiers d'un répertoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Filtrer les fichiers d'un répertoire

n°1451206
Peanuty
Posté le 03-10-2006 à 09:58:12  profilanswer
 

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 :

Code :
  1. File ioRepTravail = new File(sNomRepTravail);
  2. File[] tabioSourceFile = ioRepTravail.listFiles(new FilenameFilter("bidule*.csv" ));
  3. for ( int i=0; i<tabioSourceFile.length; i++ )
  4. {
  5.    traitement sur tabioSourceFile...
  6. }


=> 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
mood
Publicité
Posté le 03-10-2006 à 09:58:12  profilanswer
 

n°1451228
Bidem
Posté le 03-10-2006 à 10:10:26  profilanswer
 

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=
:/

n°1451233
Peanuty
Posté le 03-10-2006 à 10:16:18  profilanswer
 

:ouch:  
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. :sarcastic:  
 
Merci, je vais essayer de comprendre comment faire ça. Je sens que je vais encore adorer le Java...  :pfff:

n°1451234
benou
Posté le 03-10-2006 à 10:17:43  profilanswer
 

avec une regexp ca prend 4 lignes à coder ...
 
tin les jeunes d'aujourd'hui ....

n°1451237
Peanuty
Posté le 03-10-2006 à 10:20:05  profilanswer
 

benou a écrit :

avec une regexp ca prend 4 lignes à coder ...
 
tin les jeunes d'aujourd'hui ....


 
Sauf que le filtre sera passé en paramètre à l'éxécution. :/

n°1451240
benou
Posté le 03-10-2006 à 10:20:45  profilanswer
 

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 :o)

n°1451247
Peanuty
Posté le 03-10-2006 à 10:30:41  profilanswer
 

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.  :jap:  
Enfin voilà.

n°1451249
benou
Posté le 03-10-2006 à 10:35:14  profilanswer
 

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 ...

n°1451316
Peanuty
Posté le 03-10-2006 à 11:47:24  profilanswer
 

1h plus tard...  :D  
J'ai enfin -presque- réussi à utiliser ce fameux Filtername "qui n'est pas grand chose à faire".  :whistle:  
 

Code :
  1. File ioRepTravail = new File(sNomRepTravail);
  2. File[] tabioSourceFile = ioRepTravail.listFiles(new Filtre(sMasqueFicDonnees));
  3. // rq : sMasqueFicDonnees est récupéré dans args[]
  4. for ( int i=0; i<tabioSourceFile.length; i++ )
  5. {
  6.    traitement sur tabioSourceFile[i]...
  7. }


Code :
  1. class Filtre implements FilenameFilter
  2. {
  3. private String sRegex;
  4. public Filtre(String sMasque)
  5. {
  6.  // Conversion des regex : OS -> Java
  7.  // * -> .++
  8.  sRegex = sMasque.replaceAll("*", ".++" );
  9.  // ? -> .
  10.  sRegex = sMasque.replaceAll("?", "." );
  11. }
  12. public boolean accept(File sRepAFiltrer, String sNomFic)
  13. {
  14.  return sNomFic.matches(sRegex);
  15. }
  16. }


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

n°1451322
souk
Tourist
Posté le 03-10-2006 à 11:50:31  profilanswer
 


replaceAll prend une regex en premier parametre, une string en deuxieme, donc faut excaper ton * en \\*
replace prend des char donc pas des strings [:souk]

mood
Publicité
Posté le 03-10-2006 à 11:50:31  profilanswer
 

n°1451330
benou
Posté le 03-10-2006 à 11:53:36  profilanswer
 

sans dire que là ton premier replaceAll sert à rien vu que tu ecrase son résultat par le 2e ...

n°1451477
Peanuty
Posté le 03-10-2006 à 14:52:26  profilanswer
 

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 [:souk]


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 ...


:whistle:  
 
Donc au final :

Code :
  1. public Filtre(String sMasque)
  2. {
  3.  // Conversion des regex : OS -> Java
  4.  // . -> \\. /!\ test à garder en 1ère position
  5.  sRegex = sMasque.replaceAll("\\.", "\\\\\\." );
  6.  // * -> .++
  7.  sRegex = sRegex.replaceAll("\\*", ".*" );
  8.  // ? -> .
  9.  sRegex = sRegex.replaceAll("\\?", "." );
  10. }


Merci.  :jap:

Message cité 1 fois
Message édité par Peanuty le 04-10-2006 à 10:47:54
n°1451657
souk
Tourist
Posté le 03-10-2006 à 17:32:45  profilanswer
 

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 [:souk]

n°1451760
charly007
Posté le 03-10-2006 à 21:00:02  profilanswer
 
n°1451764
benou
Posté le 03-10-2006 à 21:07:04  profilanswer
 

pratique ça ...

n°1451820
Peanuty
Posté le 03-10-2006 à 22:31:15  profilanswer
 


 
Ah ben voilà.  :bounce:  
(bon, maintenant que ça marche j'y touche plus, mais ça pourra servir à d'autres, ou pour la prochaine fois  :) )

n°1451822
charly007
Posté le 03-10-2006 à 22:35:21  profilanswer
 

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)  :)

Message cité 1 fois
Message édité par charly007 le 03-10-2006 à 22:36:58
n°1451826
Peanuty
Posté le 03-10-2006 à 22:42:36  profilanswer
 

charly007 a écrit :

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)  :)


 
Bon ben j'enlève le [Résolu] alors si tu veux avoir des réponses.  ;)  

n°1451827
charly007
Posté le 03-10-2006 à 22:45:13  profilanswer
 

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.


Message édité par charly007 le 03-10-2006 à 22:45:26

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Résolu] Filtrer les fichiers d'un répertoire

 

Sujets relatifs
créer un répertoire[Résolu] S'envoyer un formulaire sur sa boîte mail
[RESOLU] Extraire en xls[BATCH DOS] Effacer fichiers temp tous les mois
Uploader des fichiers via un formulaire en PHP[Résolu]Client/serveur qui marche qu'en local
[résolu]Problèmes rencontrés pour la mise en page[RESOLU] question rapide (je pense)
[Résolu]div redimensionnable ? [en fait, non]recherche de données dans excel sans ouvrir les fichiers
Plus de sujets relatifs à : [Résolu] Filtrer les fichiers d'un répertoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR