Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CHERCHER UN FICHIER


Information sur la source

Catégorie :Application Classé sous : cherche, recherche, fichier, filtre, filtrage Niveau : Débutant Date de création : 01/10/2008 Date de mise à jour : 01/10/2008 15:02:24 Vu : 2 485

Note :
Aucune note

Commentaire sur cette source (29)
Ajouter un commentaire et/ou une note

Description

Bonjour,

Cette classe vous permet d'effectuer une recherche de fichiers (1 ou plusieurs) dans une LISTE de fichiers déjà existante appelé en paramètre par 'File[] fichiers'. Elle retourne une liste de fichiers correspondant a la recherche (0 ou +) et affiche la progression de la recherche. Elle affiche également le résultat de la recherche a savoir le nombre d'éléments trouvé (0 ou +).


 

Source

  • //1ere méthode : lister les fichiers du répertoire "repertoire"
  • import java.io.*;
  • public class listerFichier {
  • static File[] listeDeFichiers(String repertoire) {
  • File directoryToScan = new File(repertoire);
  • File[] fichiers = null;
  • System.out.println("Repertoire \"" + repertoire + "\" chargé.");
  • //Liste tous les fichiers contenue dans le dossier spécifier :
  • fichiers = directoryToScan.listFiles();
  • return fichiers;
  • }
  • }
  • //2eme Méthode : filtrage de la liste de recherche
  • package ChercherUnFichier;
  • import java.io.*;
  • public class chercher {
  • static File[] listerRepertoire(File[] fichiers, String fichierAChercher) {
  • File[] listeDesFichiersTempo = new File[fichiers.length];
  • boolean trouve = false;
  • int nbreTrouve = 0;
  • float pourcentageRecherche = 0;
  • int i;
  • //boucle de recherche de fichier correspondant au filtre :
  • for (i = 0; i < fichiers.length; i++) {
  • //calcul du pourcentage de progression :
  • pourcentageRecherche = (float)Math.round(((float)(100 * i) / fichiers.length)* 100) / 100;
  • //vérifie si le fichier actuel correspond a la recherche
  • //la variable fichierAChercher a pour valeur possible :
  • // * "(?i)blabla.*" => fichier commençant par "blabla"
  • // * "(?i).*blabla.*" => fichier contenant "blabla"
  • // * "(?i).*blabla" => fichier finissant par "blabla"
  • if (fichiers[i].toString().matches(fichierAChercher) == true) {
  • listeDesFichiersTempo[nbreTrouve] = fichiers[i];
  • trouve = true;
  • System.out.println(pourcentageRecherche + "% Fichier trouvé : " + listeDesFichiersTempo[nbreTrouve]);
  • nbreTrouve++;
  • } else {
  • System.out.println(pourcentageRecherche + "%");
  • }
  • }
  • //Création du tableau contenant seulement les fichiers filtré :
  • File[] listeDesFichiers = new File[nbreTrouve];
  • for (i = 0; i < listeDesFichiers.length; i++) {
  • listeDesFichiers[i] = listeDesFichiersTempo[i];
  • }
  • if (trouve) {
  • System.out.println("100%\n " + nbreTrouve + " fichier(s) trouvé.");
  • } else {
  • System.out.println("100%\nAucun fichier trouvé.");
  • }
  • //retourne la liste des fichiers recherchés
  • return listeDesFichiers;
  • }
  • }
//1ere méthode : lister les fichiers du répertoire "repertoire"

import java.io.*;

public class listerFichier {

    static File[] listeDeFichiers(String repertoire) {
        File directoryToScan = new File(repertoire);
        File[] fichiers = null;
        System.out.println("Repertoire \"" + repertoire + "\" chargé.");
        //Liste tous les fichiers contenue dans le dossier spécifier : 
        fichiers = directoryToScan.listFiles();
        return fichiers;
    }
}

//2eme Méthode : filtrage de la liste de recherche

package ChercherUnFichier;

import java.io.*;

public class chercher {

    static File[] listerRepertoire(File[] fichiers, String fichierAChercher) {

        File[] listeDesFichiersTempo = new File[fichiers.length];
        boolean trouve = false;
        int nbreTrouve = 0;
        float pourcentageRecherche = 0;
        int i;
        //boucle de recherche de fichier correspondant au filtre :
        for (i = 0; i < fichiers.length; i++) {
            //calcul du pourcentage de progression : 
            pourcentageRecherche = (float)Math.round(((float)(100 * i) / fichiers.length)* 100) / 100;
            //vérifie si le fichier actuel correspond a la recherche
            //la variable fichierAChercher a pour valeur possible : 
            //  *  "(?i)blabla.*" => fichier commençant par "blabla"
            //  *  "(?i).*blabla.*" => fichier contenant "blabla"
            //  *  "(?i).*blabla" => fichier finissant par "blabla"
            if (fichiers[i].toString().matches(fichierAChercher) == true) {
                listeDesFichiersTempo[nbreTrouve] = fichiers[i];
                trouve = true;
                System.out.println(pourcentageRecherche + "% Fichier trouvé : " + listeDesFichiersTempo[nbreTrouve]);
                nbreTrouve++;

            } else {
                System.out.println(pourcentageRecherche + "%");
            }
        }
        //Création du tableau contenant seulement les fichiers filtré :
        File[] listeDesFichiers = new File[nbreTrouve];
        for (i = 0; i < listeDesFichiers.length; i++) {
            listeDesFichiers[i] = listeDesFichiersTempo[i];
        }
        if (trouve) {
            System.out.println("100%\n " + nbreTrouve + " fichier(s) trouvé.");
        } else {
            System.out.println("100%\nAucun fichier trouvé.");
        }
        //retourne la liste des fichiers recherchés
        return listeDesFichiers;
    }
}

Conclusion

Ces classes sont appelées comme suivant (dans une autre classe ex : main(...)):

                File[] fichiersDuRepertoire = listerFichier.listeDeFichiers(repertoireSource);
                File[] listeDesFichiersATraiter = chercher.listerRepertoire(fichiersDuRepertoire, filtre);

repertoireSource est l'adresse du repertoire (ex "c:/test" ou "c:\\test")
où "fichiersDuRepertoire" est une liste crée PREALABLEMENT et "filtre" correspond au critaire de la reccherche et "listeDesFichiersATraiter" est la liste des fichiers recherché

Le programme fonctionne bien, en cas de problème contacté moi, je me ferai un plaisir de vous aider.

Cordialement

Krysh Nar
Le développeur mystérieux


 

Historique

01 octobre 2008 10:57:45 :
faute d'orthographes vue pendant la prévisualisation
01 octobre 2008 11:03:00 :
.
01 octobre 2008 14:54:43 :
.
01 octobre 2008 15:02:24 :
.

Commentaires et avis

signaler à un administrateur
Commentaire de petifa le 01/10/2008 11:52:06

Slt,
Ta source est pas mal mais quelques remarques :

- pourquoi déclarer un File[] pour la liste des fichiers temporaires
# File[] listeDesFichiersTempo = new File[fichiers.length];
# listeDesFichiersTempo[nbreTrouve] = fichiers[i];

tu aurais pu mettre un tableau de int contenant les positions des fichiers trouvés dans le tableau
int [] posFichiersTrouves = new int[fichiers.length]
posFichiersTrouves [nbreTrouve] = i;

et après dans ta boucle
# listeDesFichiers[i] = listeDesFichiersTempo[i];

listeDesFichiers[i] = fichiers[posFichiersTrouves[i]];

comme ca si tu as en entrée un tableau de 2000 fichiers tu ne recréé pas un tableau temporaire de 2000 File mais de 2000 int,


- A quoi te sert la variable trouve???
# boolean trouve = false;

a la fin de ta fonction au lieu de mettre
# if (trouve) {
tu aurais du mettre
if (nbreTrouve != 0)

signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 12:49:56

Bonjour,
Tu a raison pour la booléen trouve

En ce qui concerne le File[] j'ai fais comme ça car derrière cette classe j'ai effectuer une autre classe qui a pour but de lister tous les fichiers qui ce trouve dans un répertoire donc voila

signaler à un administrateur
Commentaire de sheorogath le 01/10/2008 12:51:00 administrateur CS

ouais puis meme pas recursif ... enfin en soit pas super utile quoi

signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 12:57:42

j'ai pas compris la première partie de ta remarque!!

signaler à un administrateur
Commentaire de sheorogath le 01/10/2008 13:02:18 administrateur CS

ben a la limite tu ferais une recherche d'un motif sur les noms de fichier d'une arborescence je dirais pourquoi pas ...
mais la tu ne recherche que dans un tableau de fichiers passe en param ... je trouve pas ca super utile

genre un searchFile(File root, String pattern)
{
  File []files = root.listFiles();
  for (File f : files)
    {
      if (f.isDirectory())
        searchFile(f, pattern);
      else if (f.getName().match(pattern))
        //....
    }
}


signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 13:08:08

tous simplement parce que je préféré faire 10 classes qui font chacune une fonction que une classe qui fais 10 fonction

au final c'est pareil
mais pour la compréhension et la lecture voir la correction/modification c'est bien plus utile d'avoir 1 fonction par classe. Ou 2 a la limite

signaler à un administrateur
Commentaire de sheorogath le 01/10/2008 13:51:53 administrateur CS

ouais mais la c'est pousse a l'extreme ... autant faire du C
L'objectif de l'OO c'est quand meme de regrouper des fonctionnalitee inherente a une certaine structure de donnee ...
Tu peux, pour moi, avoir autant de methodes que tu veux dans une classe au lieu d'un seule de 6000 lignes

sinon quand tu dis que je fais tout avec l'exemple que j'ai mis plus haut je suis pas d'accord je fais rien de plus si ce n'est chercher dans les sous-repertoires

signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 14:15:24

je n'ai pas dit que que tu fais tout avec l'exemple que tu a mis,
j'ai juste dit que je répartissais mes fonction ce qui explique pourquoi il n'y a pas de fonction dont tu a donnée l'exemple. je m'explique

Ma fonction effectue une recherche jusque la pas de problème
mais avant j'ai une autre fonction, dans une autre classe, qui effectue le listage d'un dossier spécifier en paramètre par un string. Ensuite je traite la cherche
puis je exploite dans une  nouvelle classe.

tu va me dire pourquoi autant de classe?

si je crée un nouveau programme avec juste une des fonction que j'ai déjà développer, j'ai juste a intégré ma classe (un fichier quoi!) dans mon programme.
Voila

en ce qui concerne ta première remarque soit :
" ouais mais la c'est pousse a l'extrême ... autant faire du C"
- soit tu est hors sujet (je ne pense pas quand même)
- soit on ne c'est pas très bien compris.

donc je vais ressayer :

pour les méthodes je suis d'accord avec toi tu peux en avoir autant que tu veux dans une classe au lieu d'un seule de 6000 lignes
mais si moi, je parle pour moi, je répartis mes fonctions, ou méthodes c'est du pareil au même, c'est dans le but d'avoir une structure plus claire. ou si tu préfère, je sépare les fonctions qui ne touche pas au même objectif

exemple :

deux fonctions "lire" et "écrire" qui permettent de lire et écrire dans un fichier seront dans la même classe
alors que deux fonction "lireDansUnFichier" et "rechercherUnFichier" qui l'une lie dans un fichier, et l'autre recherche un fichier (je sais je suis redondant) je ne les mettrai pas dans la même classe.

Tu comprend ce que je veux dire? (je ne dit pas que tu es bête je te rassure, je veux juste m'assurer que je suis clair).

Sinon je suis d'accord avec toi mon code est incomplet mais de la a dire qu'il est, je cite, "pas super utile" ... merci bien ...

signaler à un administrateur
Commentaire de petifa le 01/10/2008 14:23:39

oui c'est vrai sheorogath a raison, les classes doivent contenir un panel de fonctions permettant de faire des traitement.
Tu aurais pu faire une fonction qui recherche dans un répertoire mais qui appel ta fonction, pour reprendre l'exemple de sheorogath,

# File[] searchFile(File root, String pattern)
# {
#   if (root == null) return null;
#   File[] files = root.listFiles();
#   if (files != null && files.length > 0)
#     files = listerRepertoire(files , pattern);
#   else return null;
# }
Faire de même pour d'autres fonctions; pourquoi pas une fonction pour rechercher par rapport à la date de création.  y aurait ainsi plusieurs fonctions dans ta classe.

Par contre une remarque oublie pas de vérifier que les paramètres soient bien valides, non null par exemple.

signaler à un administrateur
Commentaire de petifa le 01/10/2008 14:28:18

quand il dit pas utile c'est ta classe, autant mettre directement ta fonction, au lieu de mettre une classe contenant une méthode

# si je crée un nouveau programme avec juste une des fonction que j'ai déjà développer, j'ai juste a intégré ma classe (un fichier quoi!) dans mon programme.

Je ne suis pas d'accord avec toi, si tu as des fonctions qui se rapportent à la recherche de fichiers, que ce soit sur le nom ou autre ou que ce soit dans un dossier, le but est le même donc la classe doit contenir toutes les fonctions.

signaler à un administrateur
Commentaire de sheorogath le 01/10/2008 14:30:56 administrateur CS

dans ce cas mets les autres fonctions ... car la sois objectif, ton code tel quel ne sert pas a grand chose
donc sois tu mets un programme complet sois tu le mets sur codyx

Sinon j'ai parle du C quand tu as dit qu'une ou deux fonction par classe etait suffisant je pensais que tu occultais l'objet

signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 14:37:58

"
Je ne suis pas d'accord avec toi, si tu as des fonctions qui se rapportent à la recherche de fichiers, que ce soit sur le nom ou autre ou que ce soit dans un dossier, le but est le même donc la classe doit contenir toutes les fonctions."

oui mais si tu veux juste répertorier des fichiers sans en faire un filtrage....

signaler à un administrateur
Commentaire de petifa le 01/10/2008 14:42:19

dans ce cas fichierAChercher = "" ou  null, et tu gères le cas en début de fonction

# static File[] listerRepertoire(File[] fichiers, String fichierAChercher)
# {
#   if (fichierAChercher == null || fichierAChercher == "") return fichiers;
#   File[] listeDesFichiersTempo = new File[fichiers.length];
#   ...

signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 14:46:35

c'est completement absurde!
j'ai deja le code pour faire une recherche
qui est archi simple en plus :

    static File[] listeDeFichiers(String repertoire) {
        File directoryToScan = new File(repertoire);
        File[] fichiers = null;
        System.out.println("Repertoire \"" + repertoire + "\" chargé.");
        //Liste tous les fichiers contenue dans le dossier spécifier :
        fichiers = directoryToScan.listFiles();
        return fichiers;
    }

c'est ce code qui viens avant la fonction ci tous dessus

signaler à un administrateur
Commentaire de sheorogath le 01/10/2008 14:49:33 administrateur CS

ajoute dans ta source la ca deviens interressant

signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 14:51:53

oki

signaler à un administrateur
Commentaire de sheorogath le 01/10/2008 14:56:29 administrateur CS

Apres si tu as d'autre fonction qui te servent pour la recherche de fichier tu peux les mettres de quoi faire une miniapi

signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 14:57:46

compression de fichier par exemple?

signaler à un administrateur
Commentaire de petifa le 01/10/2008 14:59:35

a voir si tu penses que ca rentre dans le cadre de ta classe, sinon faire une autre classe concernant la modification de fichiers...

signaler à un administrateur
Commentaire de sheorogath le 01/10/2008 15:00:56 administrateur CS

Non il y en a deja plusieurs et puis ca serais qqchose de different.

Je sais pas trop mais genre ce qui pourrais etre interressant c'est de pouvoir lister tout les fichiers d'un repertoire et ses sous repertoire avec un calcul du hash md5 ou ce genre de chose ...

Tu vois ce que je veux dire ?

signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 15:05:41

oui je vois justement je voulais faire ça avec une fonction qui se rappel si l'élément actuel et un dossier. j'ai l'idée mais pas le moyen de la faire car le problème est de faire une liste qui ... attend je viens d'avoir une idée je reste en suspend je vais essayer un truc

signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 17:32:09

voila qui est fais mais dans un autre "topic"

signaler à un administrateur
Commentaire de sheorogath le 01/10/2008 17:35:45 administrateur CS

mets ces fonctions sur codyx et je desactiverais la source ...
En source on ne prends en general que des programme complet ...

Merci

signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 17:37:00

c'est quoi codyx?

signaler à un administrateur
Commentaire de sheorogath le 01/10/2008 17:37:57 administrateur CS

http://codyx.org/

signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 17:39:15

oki

signaler à un administrateur
Commentaire de sheorogath le 01/10/2008 17:41:04 administrateur CS

merci bien,
tu n'as besoin de mettre que les fonctions pas les classes et tout ca ;)
Verifie que se soit pas en doublon, surtout pour le listeDeFichiers qui existe deja il me semble

signaler à un administrateur
Commentaire de kryshnar le 01/10/2008 17:42:03

oki je regarde

signaler à un administrateur
Commentaire de parkour le 19/10/2008 13:11:13

merci pour le code

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

réseau : recherche fonction qui transmet un fichier... [ par magicyan ] Bonjour a tous!Je developpe un jeu en réseau mais je ne sait pas comment passer un fichier xml du serveur au client. Y'a-t-il une fonction qui fait ca explorateur de fichier [ par srodrigues ] Bonjour, je cherche un code source pour faire un projet, un explorateur de fichier du genre de l'exploreur de windows. je cherche en particulier comme recherche xpath ds fichier xml [ par fredmorvant29 ] bonjour, je souhaite faire une recherche en java dans un fichier xml. je osuhaite utiliser le parseur DOM et faire une recherche à l'aide de xpath. en Recherche d'un élément donné dans un fichier XML à l'aide de SAX [ par DhakouaniM ] Bonjour ! Je cherche &#224; parser un fichier XML &#224; l'aide de SAX afin de v&#233;rifier si une balise &lt;login&gt; avec une valeur donn&#233;e fenetre de recherche de fichier [ par monstor_rox ] BonjourJ'ai actuellement un jTextField dans lequel le nom du fichier est saisi le r&#233;pertoire dans lequel ce trouve ce fichier&nbsp;etant cod&#233 recherche dans un fichier [ par q_113 ] Bonjour,je dois lire deux fichiers (A.csv et B.csv) qui contiennent des references pour en fabriquer un 3 ieme (C.csv) qui regroupe les references de une base de données embarquée en 1 seul fichier [ par romuluslepunk ] Bonjour,Je cherche un systeme de base de données pouvant être embarqué, gratuit et multiplateforme.J'ai essayé hsqdb et derby mais elles sont structur Cherche à parcourir/modifier fichier XML [ par damien781 ] Hello les prog! voici mon fichier XML:&lt;?xml version="1.0"?&gt;&lt;Blocs&gt; &lt;Bloc1&gt; &lt;para1&gt;1&lt;/para1&gt; &lt;para2&gt;2&lt;/para2&g recherche d'un fichier dans un jar [ par peyou ] J'ai écrit un petit programme java qui marche parfaitement bien et qui réalise tout un tas de transformations xsl et qui copie des fichiers modèles , Nom de fichier dans un JFileChooser [ par NykoKurapika ] Bonjours à tous, je recherche le moyen de placer à l'ouverture d'un JFileChooser, un nom de fichier dans le champ "Nom du fichier" ex : defaut.txt Je


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.