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

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs Discussion :

Récupérer un morceau de String


Sujet :

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Par défaut Récupérer un morceau de String
    Bonjour,

    je veux utiliser WatchService et Tailer en même temps, j’ai donc écris les lignes suivantes :

    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
     
                    AgentTailerListener listener = new AgentTailerListener();
                    Tailer tailer;
     
                    WatchService watcher = FileSystems.getDefault().newWatchService();
                    while (true) {
    			WatchKey watchKey;
    			watchKey = Paths.get("/tmp").register(watcher, ENTRY_CREATE);
    			watchKey = watcher.take();
     
    			for (WatchEvent<?> event : watchKey.pollEvents()) {
    				if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
    					tailSource = event.context().toString();
    					System.out.println(tailSource);
    					File file = new File(tailSource);
    					tailer = TailerFactory.createTailer(file, listener);
    					(new Thread(tailer)).start();
    				}
    			}
     
    			watchKey.reset();
    		}
    Néanmoins, ce programme m’affiche
    .goutputstream-44TY1X
    text.log~
    text.log

    Mais je veux récupérer uniquement le text.log.

    Dois-je utiliser une solution à base de scanner (ou équivalent) ou est-ce mon code qui pourrait être résolu en modifiant quelques trucs ?

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Ca veut surtout dire que l'éditeur que tu utilises crées 2 fichiers temporaires.

    Tu peux faire en sorte de filtrer par rapport au nom du fichier... Il faut qu'il y ait une extension et qu'elle ne finisse pas par ~ par exemple

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Par défaut
    J’ai écris ça :
    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
     
                            for (WatchEvent<?> event : watchKey.pollEvents()) {
                                   if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
    					tailSource = event.context().toString();
    					System.out.println(tailSource);
    					File file = new File("/tmp/"+tailSource);
    					String end = "log";
    					if(file.getName().endsWith(end)){
    						tailer = TailerFactory.createTailer(file, listener);
    						(new Thread(tailer)).start();;
     
    					}
     
    				}
    			}
     
    			watchKey.reset();
    }

    et maintenant, ça fonctionne un peu quand je lance la commande echo "auiea" > textiue.log (donc création d’un nouveau fichier) le tailer réagit mais quand je refait un echo "aiu" > textiue.log , il ne réagit pas tout le temps…

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Vu le fonctionnement du WatchService (qui dépend BEAUCOUP de ton OS...), tu devrais dans une première étape récupérer uniquement le nom des fichiers créés que tu stockes dans une liste, puis traiter la liste en lançant les threads désirés après coup.

    Essayes déjà ça et dis nous si ça améliore les choses (parce que là comme ça, je ne vois pas pourquoi ça bloquerai)

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Par défaut
    En fait, je ne sais pas si c’est exactement ce que je veux…

    Pour l’instant, ce n’est qu’un test donc je créé plein de fichier avec le terminal.

    Mais à la fin, un serveur créera un seul fichier par jour tandis que d’un jour sur l’autre, les anciens fichiers seront sauvegardés. Et ce sera ce fichier journalier qui devra être traité par le tailer et pas un ancien ; donc je ne sais pas si une liste me serait utile…

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Fais un autre programme qui crée ton fichier directement, ça te permettra d'être sûr que tu n'es pas pollué par des composants externes.

    Dans windows, la création d'un nouveau fichier provoque plusieurs évènements différents, et c'est pas forcément ceux que tu veux (vu qu'il va créer deux fichiers en tout), de même que les éditeurs de textes qui risquent de créer des fichiers temporaires.


    Ton programme de test :
    - création d'un fichier
    - petite pause
    - ajout de texte dans le fichier (avec un buffer que tu flush régulièrement pour déclencher le tail)


    Je pense que c'est la seule solution pour émuler le fonctionnement final que tu veux obtenir

Discussions similaires

  1. Récupérer un morceau d'une chaîne de caractère
    Par Sekigawa dans le forum Langage
    Réponses: 2
    Dernier message: 01/04/2008, 14h15
  2. récupérer valeur entre " " dans string
    Par L4BiN dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 25/10/2007, 11h35
  3. recuperer un morceau de string
    Par barthelus76 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 27/09/2007, 11h09
  4. Réponses: 7
    Dernier message: 09/05/2007, 21h45
  5. Réponses: 27
    Dernier message: 28/03/2007, 16h09

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