begin process at 2010 09 06 04:57:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > CHERCHER UN FICHIER

CHERCHER UN FICHIER


 Information sur la source

Note :
Aucune note
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 :4 369

Auteur : kryshnar

Ecrire un message privé
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 :
.

 Sources du même auteur

LISTAGE DES FICHIERS CONTENUE DANS UN DOSSIER ET SOUS-DOSSIE...

 Sources de la même categorie

GÉNERER UN FICHIER *.PROPERTIES EN L'AFFECTANT DANS UNE MAP par kaissun
Source avec Zip Source avec une capture REDUCTEUR D'IMAGE par hwoarang
Source avec Zip GESTION BANCAIRE par guyr07
Source avec Zip JEU : PAPIER PIERRE CISEAUX AVEC FENETRE ET BOUTON PERSONNAL... par Stefou06
Source avec Zip Source avec une capture SITE DES ANNONCES EN J2EE par TUIRIK

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TRAITMENT D'IMAGE EN JAVA par marwenjava
RECHERCHE D'ELEMENTS DANS UNE JLIST par Ze_Hulk
Source avec Zip Source avec une capture MANIPULATION D'ITERATEURS par coucou747
JCONFIGURATIONMANAGER - GESTION DES CONFIGURATIONS par Francks11
RECHERCHE DE FICHIER DANS VOTRE ORDINATEUR par AlphaSurfeur

Commentaires et avis

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)

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

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

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

Commentaire de kryshnar le 01/10/2008 12:57:42

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

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))
        //....
    }
}


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

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

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

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.

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.

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

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

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];
#   ...

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

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

ajoute dans ta source la ca deviens interressant

Commentaire de kryshnar le 01/10/2008 14:51:53

oki

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

Commentaire de kryshnar le 01/10/2008 14:57:46

compression de fichier par exemple?

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

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 ?

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

Commentaire de kryshnar le 01/10/2008 17:32:09

voila qui est fais mais dans un autre "topic"

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

Commentaire de kryshnar le 01/10/2008 17:37:00

c'est quoi codyx?

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

http://codyx.org/

Commentaire de kryshnar le 01/10/2008 17:39:15

oki

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

Commentaire de kryshnar le 01/10/2008 17:42:03

oki je regarde

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

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales