Enregistrment des résultats obtenues dans un fichier csv en java

Résolu/Fermé
sirinebennaceur Messages postés 10 Date d'inscription jeudi 30 mars 2017 Statut Membre Dernière intervention 9 mai 2017 - 30 mars 2017 à 13:33
sirinebennaceur Messages postés 10 Date d'inscription jeudi 30 mars 2017 Statut Membre Dernière intervention 9 mai 2017 - 4 avril 2017 à 11:15
Bonjour a vous ,
j'ai des resultat d'un progrramme qui ping chaque 15 min en affichant l'adresse ip , l'état du ping , data et heur maintenant j'aimerai bien savoir comment je peut enregistré ces données du ping dans un fichier csv

c'est comme ci un fichier d'historique des ping car ce ping il se repéte chaque 15 min

merci par avance :)
A voir également:

3 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
Modifié le 2 avril 2017 à 00:39
Bonjour,

Voici un exemple avec au passage une réorganisation complète du code avec des streams et du parallélisme pour gagner du temps lors du traitement, parce que si chacune de tes 166 adresses attends 5 secondes pour répondre ça prends 14 minutes avec ton code, alors qu'en faisant plusieurs adresses en même temps ça mets 1 minute avec mon code...

package ping;

import java.io.*;
import java.net.*;
import java.util.*;
import java.util.stream.*;

public class PingTest {

    public static InetAddress address170FromRange(int range) {
        try {
            return InetAddress.getByAddress(new byte[] { (byte) 170, 0, 0, (byte) range });
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }

    public static void main(String[] args) {
        List<InetAddress> addresses = IntStream.range(1, 166 + 1).mapToObj(PingTest::address170FromRange).collect(Collectors.toList());
        new Timer().schedule(new PingTask("C:/ping.csv", addresses, 5_000), 0, 15 * 60_000);
    }
}

package ping;

import java.io.*;
import java.net.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.*;

public class PingTask extends TimerTask {

    private final String fileName;
    private final Collection<InetAddress> addresses;
    private final int timeout;
    private final ForkJoinPool pool;

    public PingTask(String fileName, Collection<InetAddress> adresses, int timeout) {
        this.fileName = fileName;
        this.addresses = adresses;
        this.timeout = timeout;
        this.pool = new ForkJoinPool(addresses.size());
    }

    @Override
    public void run() {
        System.out.println("Running pings.");
        pool.execute(this::pings);
    }

    private void pings() {
        try (FileWriter fw = new FileWriter(fileName, true)) {
            fw.write(addresses.parallelStream().map(this::ping).sorted().collect(Collectors.joining("\n", "", "\n")));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private String ping(InetAddress address) {
        String result = String.format("%1$tF %1$tT;%2$s;", new Date(), address.getHostAddress());
        try {
            return result + address.isReachable(timeout);
        } catch (RuntimeException | IOException e) {
            return result + "error;" + e;
        }
    }
}
2
sirinebennaceur Messages postés 10 Date d'inscription jeudi 30 mars 2017 Statut Membre Dernière intervention 9 mai 2017
3 avril 2017 à 12:30
Bonjour ,
merciiii infiniment mais comment je peux rendre les adresse ip dans l'ordre , est comment avoir un ping reguliére qui ce repéte tt les 15 minute
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
3 avril 2017 à 18:44
La tâche qui permet de lancer les ping s'exécutent déjà toutes les 15 minutes.
new Timer().schedule(..., 0, 15 * 60_000;

Quant au tri, actuellement il y en a déjà un, mais il se fait sur la ligne du fichier, donc sur les heures des ping qui sont dans la première colonne.
fw.write(addresses.parallelStream().map(this::ping).sorted()...

On peut faire le tri sur les adresses IP, mais du coup ce seront les heures des ping qui seront dans le désordre (à une minute près), parce que vu que les différentes adresses IP sont appelés en parallèles on ne peut pas savoir exactement dans quel ordre elles seront exécutées et encore moins quand elles répondront.

Le plus simple est donc d'intervertir les colonnes du CSV et de mettre en premier l'adresse IP puis l'heure et laisser le tri tel qu'il est (sur la ligne complète).

String result = String.format("%1$s;%2$tF %2$tT;", address.getHostAddress(), new Date());

S'il y a besoin d'affiner le tri, on peut également passer un Comparator en paramètre de la méthode sorted()
0
sirinebennaceur Messages postés 10 Date d'inscription jeudi 30 mars 2017 Statut Membre Dernière intervention 9 mai 2017 > KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024
4 avril 2017 à 11:15
Bonjour ,
ça marche merci bien :D
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
30 mars 2017 à 19:09
Bonjour,

Quel serait le format du fichier CSV en sortie ?

Tu as un exemple de résultat attendu ?
1
sirinebennaceur Messages postés 10 Date d'inscription jeudi 30 mars 2017 Statut Membre Dernière intervention 9 mai 2017
Modifié le 31 mars 2017 à 10:56
bonjour ,
j'ai pas compris ta question
0
sirinebennaceur Messages postés 10 Date d'inscription jeudi 30 mars 2017 Statut Membre Dernière intervention 9 mai 2017 > sirinebennaceur Messages postés 10 Date d'inscription jeudi 30 mars 2017 Statut Membre Dernière intervention 9 mai 2017
31 mars 2017 à 13:01
voila un extrait d'affichage (c'est ne partie car l'affichage s'applique sur un pool d'adresse de 0.1 vers 0.166 :

vendredi 31 mars 2017 11:58:37
Sending Ping Request to /170.0.0.1
OK
Sending Ping Request to /170.0.0.2
ERR
Sending Ping Request to /170.0.0.3
ERR
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
31 mars 2017 à 18:46
Bonjour,

Ta question est :
"comment je peut enregistré ces données du ping dans un fichier csv"

Ma question est donc, à quoi doit ressembler le fichier obtenu ?

Un fichier CSV c'est un tableau avec des lignes et des colonnes, qu'est-que tu mettrais comme informations dans chaque case ?
0
sirinebennaceur Messages postés 10 Date d'inscription jeudi 30 mars 2017 Statut Membre Dernière intervention 9 mai 2017 > KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024
1 avril 2017 à 21:34
Bonjour ,

des information relatif a ça :
date, heure, ipv4, et état de ping
expl d'affichag obtenue
samedi 01 avr. 2017 20:31:00
Sending Ping Request to /170.0.0.1
OK
Sending Ping Request to /170.0.0.2
ERR
Sending Ping Request to /170
0
sirinebennaceur Messages postés 10 Date d'inscription jeudi 30 mars 2017 Statut Membre Dernière intervention 9 mai 2017
Modifié le 30 mars 2017 à 19:07
voici mon code de ping :
package ping;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class pingBiodec {


  public static void main(String[] args) throws UnknownHostException, IOException {
       
      int MINUTES = 15; // The delay in minutes
      Timer timer = new Timer();
       timer.schedule(new TimerTask() {
          @Override
          public void run() { // Function runs every MINUTES minutes.
              // Run the code you want here
           
             
              Date aujourdhui = new Date();
              DateFormatSymbols monDFS = new DateFormatSymbols();
              String[] joursCourts = new String[] {
                  "",      
                  "lundi",
                  "Mardi",
                  "mercredi",
                  "jeudi",     
                  "vendredi",
                  "samedi",
                  "dimanche" };

               
        monDFS.setShortWeekdays(joursCourts);
        SimpleDateFormat dateFormat = new SimpleDateFormat(
        "EEEEEEEE dd MMM yyyy HH:mm:ss",  
        monDFS);
        System.out.println(dateFormat.format(aujourdhui));
          
           InetAddress inet = null;
         
           for(int i=1;i<=166;i++){
                  try {
     
      
      inet = InetAddress.getByAddress(new byte[] { (byte) 170, (byte) 0, 0,(byte)i});
          
      
     
     } catch (UnknownHostException e) {e.printStackTrace();} 
                  System.out.println("Sending Ping Request to " + inet);
           try {
      System.out.println(inet.isReachable(5000) ? "OK" : "ERR" );
      
     } catch (IOException e) {
     
      e.printStackTrace();
     }
           }
       
           }
          } , 0, 1000 * 60 * MINUTES);
          // 1000 milliseconds in a second * 60 per minute * the MINUTES variable. 


  

}}
0