IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

existance d'un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 107
    Points : 45
    Points
    45
    Par défaut existance d'un fichier
    Bonjour ...
    Comment faire au niveau d'un code java qu'une application teste lors de son demarage , si un fichier determiné existe sur le poste dans lequel elle s'execute ou non?

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Bonjour,

    Qu'entends-tu par poste? Tu veux peut-être dire dans le dossier de travail, ou un dossier quelconque ?

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 107
    Points : 45
    Points
    45
    Par défaut un disque dur
    Bhen je veux dire dans un disque dur ou en general dans n'importe quel conteneur de fichiers
    Salut dani , d'abord ...

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Tu veux par exemple trouver le fichier fic.txt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ........
    File fichier = null;
    nomFic = "fic.txt";
    .......
    .......
    fichier = new File(nomFic);
    Et tu vas être obligé d'examiner chaque dossier du disque, depuis la racine (par exemple c:\\).

    Pour chaque dossier rencontré:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ......
    if (ficher.exists()))
    {
    // existe
    .......
    }
    esle
    {
    // n'existe pas
    .......
    }
    //passer au dossier suivant. (ne pas oublier que c'est peutêtre un sous-dossier!)
    Cordialement,

    Dan

  5. #5
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Comme dit plus haut, utilise a méthode exists() de la classe File.

  6. #6
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    Salut,

    Si tu écris "si un fichier déterminé existe" cela veux dire, en principe, que tu sais exactement où il se trouve. C'est à dire avec son chemin d'accès complet ou le répertoire de lancement. C'est par exemple un fichier qui contient des paramètres.

    Ce serait étonnant que tu ne saches pas où il se trouve et quelqu'un d'autres (application) pourrait très bien utiliser un même nom!?!

    Bref, peut-être que tu cherches autre chose. Dans ce cas joues avec le code que je viens d'écrire. Il n'est pas super bien écrit (pas une vraie classe) ou documenté et ne traite pas tout (cas Linux). Mais c'est vraiment intéressant de maîtriser un FilenameFilter.

    Pardon pour le format: si tu as Netbeans (copier/coller, sélectionner et Alt+Maj+F (ou bouton droit de la souris: Format))

    Cordialement

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    import java.io.*;
     
    /**
     * @author Boichat Jean-Bernard
     */
     
    //Vérifie si le fichier est un répertoire
    //
    class MyFileFilterDir implements FilenameFilter {
        public boolean accept(File dir, String name) {
            File theFile = new File(dir + File.separator + name);
            return theFile.isDirectory();
        }
    }
     
    //Vérifie si le fichier n'est pas un répertoire et possède le nom correct
    //
    class MyFileFilterFile implements FilenameFilter {
        public boolean accept(File dir, String name) {
            File theFile = new File(dir + File.separator + name);
            if (theFile.isDirectory()) {
                return false;
            }
     
            if (name.toLowerCase().compareTo(SearchFile.fileName.toLowerCase()) == 0) {
                return true;
            }
     
            return false;
        }
    }
     
    public class SearchFile {
        static public String fileName  = "LectureUrl.java";
        static public String dirResult = null;
     
        public static void main(String[] args) {
           String startPoint = "C:\\javacpp";
     
           if (searchDir(startPoint)) {
                System.out.println("J'ai trouvé le fichier " + fileName + " dans " + dirResult);
                return;
           }
     
           System.out.println("Je n'ai pas trouvé le fichier " + fileName + " dans " + startPoint);
     
        }
     
        //Cherche dans un répertoire
        //
        public static boolean searchDir(String dir) {
           dirResult = dir;
           File myDir = new File(dir);
           String theFiles[] = myDir.list(new MyFileFilterFile());
     
           if ((theFiles != null) && (theFiles.length > 0)) {
               return true;
           }
           else {
               String theDirs[] = myDir.list(new MyFileFilterDir());
     
               if (theDirs != null) {
                 for (int i = 0; i < theDirs.length; i++) {
                   if (searchDir(dir + File.separator + theDirs[i])) {
                       return true;
                   }
                 }
               }
           }
     
           return false;
        }
    }

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 107
    Points : 45
    Points
    45
    Par défaut c'est une application
    Bhen c'est pas une autre personne qui va chercher les fichier c'est une application qui va le faire , bon pour te mettre dans le cadre de l'application ..
    C'est une application qui travail avec les fichiers (serialization) en enregistrant des données et les modifier et les reserializer encore une fois.
    Alors puisque à chaque re-enregistrement peut ecraser l'ancien fichier , et si je deserialize sans que les fichier existe ça peut générer une erreur, je dois tester s'il existe deja sur touuut le disque dur car je sais pas ou chaque machine peut enregistrer le fichier ....
    Merci

  8. #8
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    Je capte pas trop!

    Une application correctement écrite doit savoir précisément où elle écrit ses fichiers et que ce soit n'importe quel type de fichiers: textes, binaires, sérialisés. Imagines que toutes les applications sur un PC Windows ne savaient plus où elles écrivent leurs fichiers! Un disque peut avoir plusieurs partitions! Un PC peut avoir une partition montée à l'extérieur, sur une autre machine!

    Le code que je t'ai envoyé est pratique pour analyser des répertoires entiers, pour, par exemples, effacer des fichiers de logs ou de traçage en fonction de leurs dates ou grosseurs par exemple.

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 107
    Points : 45
    Points
    45
    Par défaut trés important pour moi :)
    Merci boijea ta reponse ma inspiré d'un chose trés importante c'est de définir le repertoire dans lequel je dois enregistrer mes fichiers ou serializer mes données.
    Mais personne m'a répondu sur une question concernant si a chaque réécriture sur un fichier deja serialisé ça ecrase les données ou ça ecrase tout le fichier ou ça laisse tout comme il est et ajoute les données modifié comme etant des nouveaux données?!!!!
    merci de me repondre sur cette question pareceque c'est trés important pour moi

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Bonjour hidalg007 (et les autres),

    De toutes manières, si tu veux rechercher un fichier sur tout un disque, tu peux utiliser la source de boijea (effectivement très utile) avec un startPoint
    "C:\\" par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class SearchFile {
    static public String fileName = "leFichier.type";
    static public String dirResult = null;
     
    public static void main(String[] args) {
    String startPoint = "C:\\";   // par exemple
    tu obtiendras ton fichier ,s'il existe, mais tu ne sauras pas s'il est aussi ailleurs. Ca ne doit pas être trop compliqué de modifier la source...

    Cordialement,

    Dan

  11. #11
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour Hidalgo007,

    Je reviens d'abord sur "leFichier.type"! C'est clair qu'il peut être à plusieurs endroits et c'est clair qu'une autre application peut très bien, par un hasard quelconque, utiliser exactement le même nom. Donc il faudrait vérifier "quelque chose" dans le fichier avant de commencer à le lire! Encore une fois, si ce fichier est à un endroit fixe, le problème est résolu ... peut-être (attention à la version pour des objets Java sérialisés).

    Pour la question d'objets sérialisés, s'ils écrasent le(s) fichier(s), cela dépend! Tu nous dis pas comment cela marche! C'est quoi sérialisé? Cela peut-être des objects Java, des fichiers délimités ou encore une base de données (XML, hybernate, etc).

    Pour des objets sérialisés, au moment du chargement du programme, il peuvent être chargé en mémoire. Ensuite, ils peuvent être mis à jour et recopier sur le disque: donc on a les derniers (les anciens avec les modifs). Tu pourrais aussi garder les anciens objets (backup), etc, etc.

    Pas très clair .... il faudrait nous dire ce que tu fais!
    Cordialement

  12. #12
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 107
    Points : 45
    Points
    45
    Par défaut Voici un new probleme
    ben ce que je fais c'est tout simplement import des listes d'objet déjà définis et serializables et les modifier , mettre a jour la liste et reserialiser
    le problème que je trouve maintenant avec cette application c'est que : je deserialise une liste de cadres d'une agence , je modifie un attribut (une prime personnelle selon quelques critères) et je l'affiche en output s'est modifié , mais quand je ferme l'application et je refais la même chose l'attribut n'est pas actualisé ie la serialization de cet attribut ne marche pas même si d'autres attributs comme le nom se modifie au niveau du fichier

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
     
     
    ArrayList B=new ArrayList();
     
    if(jRadioButton1.isSelected()){
    int i=jComboBox2.getSelectedIndex();
    //float n ;
     //////////////
     try{
     FileInputStream entre2 = new FileInputStream("c:\\Cadre.dat");
    			ObjectInputStream e2 = new ObjectInputStream(entre2);
                            B.addAll((ArrayList)(e2.readObject()));
     }
     
     catch(IOException io)  {io.printStackTrace();}    
     catch(ClassNotFoundException c){c.printStackTrace();}
    ////////////////////////////////////////
    /*je doute a ce casting qui me rend les 
     Cadre cdr=(Cadre)B.get(i);
     
     
     float k=Contratt.primeCadre(Float.parseFloat(jTextField4.getText()),(int)jComboBox1.getSelectedIndex());
    cdr.tilodyalo(k);
    ((Cadre)cdr).LCC(C);
    cdr.zidlo(Float.parseFloat(jTextField4.getText()));
    cdr.ajouterprAuto(k);
     
    /* c'est l'application qui modifie l'attribue primeAuto qui forme un probleme pour moi*/
     
    B.add(i,((Membre)cdr).clone());
    System.out.println(k);
    System.out.println(cdr.primeAuto);
    float n=cdr.primeAuto;
     System.out.println(B);
     System.out.println(((Cadre)B.get(i)).primeAuto);
    ////////////////////////
     
     
    try{
    FileOutputStream sortie1 = new FileOutputStream("c:\\Cadre.dat");
    			ObjectOutputStream s1 	= new ObjectOutputStream(sortie1);
     
    			s1.writeObject(B);
                            s1.writeObject(n);
     
                            s1.flush();
    			s1.close();
    }
    catch(IOException io)  {io.printStackTrace();}
     
     }
     
     
     
    }
    Voici la méthode Constructeur de Cadre :
    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
     
     
    public Cadre(String Nom , String Prenom , int Tlf , int numbureau, int s, int pp, int pa,int ps, int ph){
       nom=Nom;
       prenom=Prenom;
       phone=Tlf;
       bureau=numbureau;
       somme=s;
        primeperso=ps;
     primeAuto=pa;
        primeMoto=0;
        primeSante=ps;
        primeHabitation=ph;
     
       }
    Merci

  13. #13
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    Salut hidalg007,

    Depuis hier les vacances sont finies et j'ai beaucoup moins de temps. On dira que c'est normal.

    De ton code, on ne voit pas la structure. On ne sait pas si tout est dans une même classe static ou alors complément séparé dans de jolies classes "state of the art".

    Pour une application comme celle-là, il faut séparer le GUI du reste. Du dois être capable, avec un programme de test, et SANS interface graphique (et avec pas beaucoup plus que 4 instructions) de:

    - Désérialiser ton fichier
    - Montrer les objets à l'écran
    - Modifier un ou plusieurs paramètres
    - Montrer les objets à l'écran

    .... et on recommenceras!

    Pour new FileInputStream("c:\\Cadre.dat") je mettrais new FileInputStream(parameters.getPath() + parameters.getFilenameInput()").
    Attention au File.separator pour assurer une compatibilité Linux.

    parameters serait l'objet d'une classe qui contiendrait tes paramètres lu d'un fichier (délimité ou XML). Je mettrais aussi un fichier différent à la sortie afin de le reprendre au second passage. Si tu n'as pas le temps (je le fais aussi) écrit cette classe Parameters sans lecture et avec des attributs privés comme path, filenameInput et filenameOutput (règle des Beans). Quand ton programme sera prêt filenameInput et filenameOutput pourront être les mêmes.

    En faisant ce genre de réflexions (classes et méthodes de test) tu vas automatiquement écrire du bon code, pas forcément OO, mais solide!

    Ta faute n'est peut-être pas dans la partie de la dé/sérialisation mais avec des modules de tests tu sera plus efficaces et tu pourras les réutiliser beaucoup plus tard ... même dans 10 ans!

    Cordialement

Discussions similaires

  1. Vérification de l'existence d'un fichier
    Par alfu dans le forum ASP
    Réponses: 2
    Dernier message: 06/10/2004, 13h29
  2. [C++ .NET] Test existence d'un fichier
    Par remixxl dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 26/07/2004, 19h21
  3. Réponses: 3
    Dernier message: 24/06/2004, 11h23
  4. tester l existence d un fichier sous turbo pascal
    Par Newllite dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 25/01/2004, 12h47
  5. Peut on tester l'existence d'un fichier ?
    Par Alamassepointcom dans le forum Flash
    Réponses: 2
    Dernier message: 10/10/2002, 12h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo