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?
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?
Bonjour,
Qu'entends-tu par poste? Tu veux peut-être dire dans le dossier de travail, ou un dossier quelconque ?
Bhen je veux dire dans un disque dur ou en general dans n'importe quel conteneur de fichiers
Salut dani , d'abord ...
Tu veux par exemple trouver le fichier fic.txt :
Et tu vas être obligé d'examiner chaque dossier du disque, depuis la racine (par exemple c:\\).
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);
Pour chaque dossier rencontré:
Cordialement,
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!)
Dan
Comme dit plus haut, utilise a méthode exists() de la classe File.
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; } }
Auteur chez Eyrolles
Dernier ouvrage: Java pour le Raspberry Pi 3 et une présentation générale et extensions
Articles sur les ESP8266 et ESP32
J'ai adoré écrire ces articles ici:
- Python Flask et SQLite pour le Raspberry Pi 3 ou 4 - exemples de communication avec des ESP32 ou ESP8266
- MicroPython pour le NodeMCU (ESP8266) avec Thonny (août 2019)
- PyDev, un IDE pour Python, sous Eclipse et pour le Raspberry Pi 3
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
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.
Auteur chez Eyrolles
Dernier ouvrage: Java pour le Raspberry Pi 3 et une présentation générale et extensions
Articles sur les ESP8266 et ESP32
J'ai adoré écrire ces articles ici:
- Python Flask et SQLite pour le Raspberry Pi 3 ou 4 - exemples de communication avec des ESP32 ou ESP8266
- MicroPython pour le NodeMCU (ESP8266) avec Thonny (août 2019)
- PyDev, un IDE pour Python, sous Eclipse et pour le Raspberry Pi 3
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
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
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...
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
Cordialement,
Dan
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
Auteur chez Eyrolles
Dernier ouvrage: Java pour le Raspberry Pi 3 et une présentation générale et extensions
Articles sur les ESP8266 et ESP32
J'ai adoré écrire ces articles ici:
- Python Flask et SQLite pour le Raspberry Pi 3 ou 4 - exemples de communication avec des ESP32 ou ESP8266
- MicroPython pour le NodeMCU (ESP8266) avec Thonny (août 2019)
- PyDev, un IDE pour Python, sous Eclipse et pour le Raspberry Pi 3
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
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
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();} } }Merci
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; }
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
Auteur chez Eyrolles
Dernier ouvrage: Java pour le Raspberry Pi 3 et une présentation générale et extensions
Articles sur les ESP8266 et ESP32
J'ai adoré écrire ces articles ici:
- Python Flask et SQLite pour le Raspberry Pi 3 ou 4 - exemples de communication avec des ESP32 ou ESP8266
- MicroPython pour le NodeMCU (ESP8266) avec Thonny (août 2019)
- PyDev, un IDE pour Python, sous Eclipse et pour le Raspberry Pi 3
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager