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 :

[Fichier] Api équivalent du tail -f sous unix


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier Avatar de Actarus78
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 87
    Points : 118
    Points
    118
    Par défaut [Fichier] Api équivalent du tail -f sous unix
    Bonjour à tous,

    J'aimerai savoir s'il éxiste une lib en java permettant de lire en temps réel un fichier.

    J'ai 1 fichier qui log le flux rentrant et le flux sortant de ma socket.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printIntoLog = new PrintStream(new FileOutputStream(Log.getDefaultFullLogPath()+"Msg_"+Log.getTime("MM_dd_yyyy")+".log", true),true,"US-ASCII");
    Maintenant j'aimerai avoir dans une autre class un objet capable de lire en continue ce fichier à la mode tail -f nomdufichier sous unix et donc d'afficher ses logs dans un textarea qui sera auto-rafraichit.

    merci

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Pourquoi ne pas ecrire une méthode qui ecrit directement à la fin du fichier et du JTextArea ?
    Pour faire ce que tu dis, il faudrait ouvrir deux streams sur un fichier,(un en lecture, un en ecriture) et avoir une lecture bloquante, je ne crois pas que ce soit le cas. (EndofFileException, je crois).

    Le plus facile est d'ecrire dans le JTextArea et le fichier en meme temps, ou de faire un JTextArea qui ecrit dans le log.

  3. #3
    Membre régulier Avatar de Actarus78
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 87
    Points : 118
    Points
    118
    Par défaut
    Effectivement, ce serait la solution la plus simple mais le probleme est que je veux séparer le traitement log des traitements graphiques. Ce même programe possede un framework sans ihm et donc si je fais des appels depuis mon ecriture dans le fichier (qui se trouve dans le framework) vers un jtextearea, je vais avoir un plantage lorsque ce dernier sera lancé sans GUI.

    Je veux donc pouvoir lire en temps réel ce fichier de facon séparer à partir de ma GUI.

  4. #4
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Truc et astuce: tu ecris une interface Logger avec une methode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void log(String aMessage);
    Tu as 2 implementations : un FileLogger et un JLogger par exemple

    Et tu as une methode dans la classe ecrivant sur ta socket addLogger(Logger)

    Et voilou, pas une appli graphique tu ajoutes seulement ton FileLogger, si graphique tu ajoutes aussi le JLogger .. et c'est plus efficace que de lire un fichier "en temps reel"

    Bulbo

  5. #5
    Membre régulier Avatar de Actarus78
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 87
    Points : 118
    Points
    118
    Par défaut
    Merci bulbo,

    Je n'ai malheureusement pas d'accès sur la classe java écrivant les logs (pb de droits... )C'est pour ca que je voulais un traitement séparé et j'ai trouvé mon bonheur que j'ai bien évidement adapté à mes besoins, je le post ici des fois que cela puisse servir à d'autres.

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;
    import java.io.*;
    import javax.swing.*;
     
    public class LogReaderApp extends JApplet
    {
        private Thread clockThread = null;
        private Thread writeThread = null;
     
        FileInputStream fis = null;
        DataInputStream dis = null;
        BufferedReader in = null;
        FileOutputStream fis1 = null;
        DataOutputStream dis1 = null;
        BufferedWriter in1 = null;
     
        private void runWork() {
    	String line = null;
    	try {
    	    //while ( null != ( line = in.readLine() ) )
    	    //while( line = in.readLine() )
    	    while( true )
    		{
    		    line = in.readLine();
    		    if( null == line ) 
    			{
    			    Thread.sleep( 100 );
    			    continue;
    			}
    		    System.out.println ( "appended line:  <" + line + ">"  );
    		}
    	} catch( Exception e ) {
    	    e.printStackTrace();
    	}
        }
        private void runOtherWork() {
    	int count = 0;
    	try {
    	    fis1 = new FileOutputStream ( "/temp/log.txt" );
    	    dis1 = new DataOutputStream ( fis1 );
    	    in1 = new BufferedWriter ( new OutputStreamWriter( dis1 ));
    	    while( true ) {
    		in1.write( "\ntext: " + count++   );
    		in1.flush();
    		System.out.println( "row: " + count );
    		Thread.sleep( 10000 );
    	    }
    	} catch( Exception e ) {
    	    e.printStackTrace();
    	}
        }
        public LogReaderApp( )
        {
        }
        public void init() {
    	initialize();
        }
        private void initialize() {
    	try
    	    {
    		fis = new FileInputStream ( "/temp/log.txt" );
    		dis = new DataInputStream ( fis );
    		in = new BufferedReader ( new InputStreamReader( dis ));
    	    }
    	catch( IOException  e)
    	    {
    		System.err.println ("IOE host " + e.getMessage () );
     
    	    }
    	try {
    	    Runnable r = new Runnable() {
    		    public void run() {
    			try {
    			    runWork();
    			} catch (Exception e) {
    			    e.printStackTrace();
    			}
    		    }
    		};
    	    clockThread = new Thread(r);
    	    clockThread.start();
    	    Runnable r1 = new Runnable() {
    		    public void run() {
    			try {
    			    runOtherWork();
    			} catch (Exception e) {
    			    e.printStackTrace();
    			}
    		    }
    		};
    	    writeThread = new Thread(r1);
    	    writeThread.start();
     
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}
        }
     
        public static void main ( String args [] )
        {
    	new LogReaderApp().initialize();
        }
    }
    Merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/03/2006, 10h52
  2. Concaténation de fichiers sous UNIX?
    Par airmax77 dans le forum Linux
    Réponses: 4
    Dernier message: 27/01/2006, 16h23
  3. feof et fichier texte sous unix
    Par Magicmax dans le forum C
    Réponses: 7
    Dernier message: 07/12/2005, 08h16
  4. Réponses: 7
    Dernier message: 20/09/2005, 17h47

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