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 :

Ecrire et lire un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 4
    Points
    4
    Par défaut Ecrire et lire un fichier
    Bonjour,

    J'ai le code suivant :

    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
     
    public class ActionTraces{
     
    	public void ecrire(String nomFic, String texte)
    	{
    		//on va chercher le chemin et le nom du fichier et on met tout ca dans un String
    		String adressedufichier = System.getProperty("Bureau") + "/"+ nomFic;
     
    		//on met try si jamais il y a une exception
    		try
    		{
    			/**
                             * BufferedWriter a besoin d un FileWriter, 
                             * les 2 vont ensemble, on donne comme argument le nom du fichier
                             * true signifie qu on ajoute dans le fichier (append), on ne marque pas par dessus 
                             
                             */
    			FileWriter fw = new FileWriter(adressedufichier, true);
     
    			// le BufferedWriter output auquel on donne comme argument le FileWriter fw cree juste au dessus
    			BufferedWriter output = new BufferedWriter(fw);
     
    			//on marque dans le fichier ou plutot dans le BufferedWriter qui sert comme un tampon(stream)
    			output.write(texte);
    			//on peut utiliser plusieurs fois methode write
     
    			output.flush();
    			//ensuite flush envoie dans le fichier, ne pas oublier cette methode pour le BufferedWriter
     
    			output.close();
    			//et on le ferme
    			System.out.println("fichier créé");
    		}
    		catch(IOException ioe){
    			System.out.print("Erreur : ");
    			ioe.printStackTrace();
    			}
     
    	}
     
    	public static void main (String[] args){
     
    		new ActionTraces().ecrire("monFichier.log", "datetime");
    	}
    }
    L'erreur est :
    Code Trace : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    java.io.FileNotFoundException: null\actionTraceTracabilite.log (Le chemin d?accès spécifié est introuvable)
    	at java.io.FileOutputStream.open(Native Method)
    	at java.io.FileOutputStream.<init>(Unknown Source)
    	at java.io.FileOutputStream.<init>(Unknown Source)
    	at java.io.FileWriter.<init>(Unknown Source)
    	at fr.dlsante.tracesejb.trace.ActionTraces.ecrire(ActionTraces.java:35)
    	at fr.dlsante.tracesejb.trace.ActionTraces.main(ActionTraces.java:60)
    Erreur :

    Je souhaite savoir où est ce que je me suis trompé ?!

    Merci d'avance !

  2. #2
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		String adressedufichier = System.getProperty("Bureau") + "/"+ nomFic;
    Je ne suis pas sur que la propriété "Bureau" soit reconnue par le système...
    Tu cherches à ouvrir un fichier qui est sur ton bureau windows?
    Je ne suis pas mort, j'ai du travail !

  3. #3
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 797
    Points
    4 797
    Par défaut
    "Bureau" n'est pas une propriété "naturelle" (on peut l'ajouter mais bon ...)
    pour voir la liste des propriétés supportées par le poste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.getProperties().list(System.out);
    et donc quand on appelle la propriété "bureau" on récolte "null" puisqu'elle n'est pas trouvée.
    d'où le message d'erreur :
    java.io.FileNotFoundException: null\actionTraceTracabilite.log (Le chemin d?accès spécifié est introuvable)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Merci pour votre réponse.

    Mon nouveau programme :

    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
     
    public class ActionTraces{
     
     
       public static void main(final String[] args) {
           final String chemin = "C:/JAVA/actionTraces.log";
           final File fichier =new File(chemin); 
           try {
               // Creation du fichier
               fichier .createNewFile();
               //System.out.println("Fichier ok !!");
               // creation d'un writer (un écrivain)
               final FileWriter writer = new FileWriter(fichier);
               try {        	        	   
            	 	 String newLigne=System.getProperty("line.separator");
     
    			 writer.write("datetime" + " " + new DateTime()  + newLigne);			 
     
                   //writer.write("encore et encore");
               } finally {
                   // quoiqu'il arrive, on ferme le fichier
                   writer.close();
               }
           } catch (Exception e) {
               System.out.println("Impossible de creer le fichier");
           }
    	}
    }
    Mon fichier est créé et je trouve bien la date en l'ouvrant, mon problème maintenant c'est à chaque fois que j'exécute mon programme, il crase ce qu'il y avait avant or que moi je souhaite qu'il enregistre ce que j'écrive donc à chaque fois que je l'exécute, je veux qu'il ajoute une nouvelle ligne !

    Merci d'avance

  5. #5
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 797
    Points
    4 797
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Pour ajouter quelques chose a la fin d'un fichier (append) il faut utiliser le bon constructeur avec le paramètre append valant true.

    Javadoc
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    ... J'avance !!

    Mon programme :

    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
     
    public class ActionTraces{
     
     
       public static void main(final String[] args) {
           final String chemin = "C:/JAVA/actionTraces.log";
           final File fichier =new File(chemin); 
           FileWriter writer = null;
           try {
               // creation d'un writer (un écrivain)
               writer = new FileWriter(fichier, true);
               try {
     
            		 String newLigne=System.getProperty("line.separator");
            		 String texte = "datetime" + " " + new DateTime() + " " + "Logger=" + newLigne;
    			 writer.write(texte, 0, texte.length());
     
                   //writer.write("encore et encore");
               } finally {
                   // quoiqu'il arrive, on ferme le fichier
            	   if (writer != null){
                       writer.close();
            	   }
               }
           } catch (Exception e) {
               System.out.println("Impossible de creer le fichier");
           }
    	}
    }
    Pour bien expliquer les choses, j'ai une application JEE, la première page est l'authentification, je voulais ajouter cette classe pour enregistrer dans un fichier la date et celui qui se connecte à l'application. Je ne sais pas si c'est la bonne façon de procéder mais c'est tout ce que j'ai trouvé !! ... Là, je récupère la date du système mais comment faire pour récupérer celui qui se log !!


    Le résultat que je souhaite avoir c'est :

    datetime 2015-09-18T16:51:38.560+02:00 Logger=yoanlibert
    datetime 2015-09-18T17:23:38.560+02:00 Logger=yoanlibert

    Merciiiiiii !

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 797
    Points
    4 797
    Par défaut
    comment faire pour récupérer celui qui se log
    Ben ça dépend de la techno utilisée.
    Quand tu parles de pages, je suppose que c'est du Web. Il faut aller voir dans le code qui génère les pages.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  9. #9
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Je n'ai pas bien compris ...

    Effectivement, c'est une application web "J2EE", mes pages sont faites en JSF.
    J'ai une classe "Authentification" qui me permet de s'authentifier avec un login et un passeword que je récupère dans un service web.

  10. #10
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 797
    Points
    4 797
    Par défaut
    Citation Envoyé par yoanlibert Voir le message
    login et un passeword que je récupère
    Ben alors où est le problème ?
    Tu as bien réussi à écrire quelque chose dans un fichier ...
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  11. #11
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 797
    Points
    4 797
    Par défaut
    Tu transformes un peu ta classe :
    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
    public class ActionTraces {
    
        public ActionTraces(String user) {
            this.user = user;
        }
    
        public void log() {
            String chemin = "C:/JAVA/actionTraces.log";
            File fichier = new File(chemin);
            FileWriter writer = null;
            try {
                // creation d'un writer (un écrivain)
                writer = new FileWriter(fichier, true);
                try {
    
                    String newLigne = System.getProperty("line.separator");
                    String texte = "datetime" + " " + new DateTime() + " " + "Logger=" + user + newLigne;
                    writer.write(texte, 0, texte.length());
    
                    //writer.write("encore et encore");
                } finally {
                    // quoiqu'il arrive, on ferme le fichier
                    if (writer != null) {
                        writer.close();
                    }
                }
            } catch (Exception e) {
                System.out.println("Impossible de creer le fichier");
            }
        }
    
        private String user;
    }
    et hop tu l'utilises dans ta classe Authentification dès que tu as le "user" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActionTraces actionTraces = new ActionTraces(userName);
    actionTraces .log();
    fastoche ou pas fastoche ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  12. #12
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Fastoche ... Merci ... Mais faut savoir que je ne suis pas expert c'est pour ça !!

    Si je peux me permettre encore, je souhaite aussi vidé mon fichier chaque jour à minuit par exemple, y a de la doc sur ça ?!

    Merci d'avance !

  13. #13
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 797
    Points
    4 797
    Par défaut
    Ne le vide pas et ne le supprime pas !
    Un fichier log est là pour garder la trace de ce qu'il s'est passé et parfois on a besoin de remonter des jours en arrière.

    Tu devrais plutôt créer un nouveau fichier tous les jours avec comme nom : "actionTraces_2015-09-21.log" (par exemple)

    Utilise un SimpleDateFormat pour le format de date :

    En reprenant le code que je t'ai posté ce la donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public void log() {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String chemin = "C:/JAVA/actionTraces_" + sdf.format(new Date()) + ".log";
            File fichier = new File(chemin);
            FileWriter writer = null;
    Comme ça, si le fichier n'existe pas encore, il est automatiquement créé.

    Comme déjà dit : Fastoche !!!
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  14. #14
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Ne le vide pas et ne le supprime pas !
    Un fichier log est là pour garder la trace de ce qu'il s'est passé et parfois on a besoin de remonter des jours en arrière.

    Tu devrais plutôt créer un nouveau fichier tous les jours avec comme nom : "actionTraces_2015-09-21.log" (par exemple)
    Tout à fait d'accord avec toi, sauf que dans mon cas je récupère chaque jour avant de vidé mon fichier les données qui sont à l'intérieur et je les stocke dans une base de données, donc rien ne sera perdu, désolé de ne pas préciser cette information avant

  15. #15
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 797
    Points
    4 797
    Par défaut
    Dans ce cas, tu peux tout aussi bien écrire les données de login
    directement dans la base de données sans passer par un fichier ...
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  16. #16
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Oui, mais c'est ce qu'on m'a demandé de faire donc pas le choix

    Y a de la doc sur ça ?! .. Merci !

  17. #17
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 797
    Points
    4 797
    Par défaut
    On t'a demandé d'écrire les logs dans un fichier pendant la journée
    puis de copier le contenu du fichier dans la base de données ?

    C'est un bizutage ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  18. #18
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Humm, comment expliquer tout ça

    A vrai dire, il y a plusieurs produits possédant des fichiers logs, leurs contenus est récupéré chaque jour puis sauvegardé dans une base de données NoSQL. Ces derniers sont consultable via une interface web.

    Ils souhaitent que je suive le même mécanisme pour mon application.

    J'espère que c'est plus compréhensif maintenant

  19. #19
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 797
    Points
    4 797
    Par défaut
    Spec :
    - Le nom du fichier ne change jamais
    - le contenu est récupéré et placé dans une base

    Donc :
    - on remet à zéro le fichier chaque nuit à 00:00.

    Solution : à 00:00 on supprime le fichier. Il sera recréé automatiquement au prochain login.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  20. #20
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Merci

    J'utilise ce code pour la suppression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Path source = Paths.get("C:/JAVA/actionTraces.log");
                        Files.delete(source);

    Comment préciser qu'il faut le faire à minuit ?

Discussions similaires

  1. Ecrire et lire un fichier txt simultanément
    Par sir_nebuchadnezzar dans le forum Général Python
    Réponses: 9
    Dernier message: 02/02/2012, 20h53
  2. ecrire et lire un fichier txt
    Par ka123tn dans le forum Débuter
    Réponses: 13
    Dernier message: 01/08/2009, 20h28
  3. ecrire et lire un fichier .txt
    Par sky88 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 20/04/2008, 16h28
  4. Comment creer (ecrire et lire) un fichier ?
    Par fefe69 dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 06/01/2008, 16h52
  5. [CSV] Ecrire et Lire un fichier Excel depuis PHP
    Par cocaetjusdorange dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2006, 11h10

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