Enregistrment des résultats obtenues dans un fichier csv en java
Résolu
sirinebennaceur
Messages postés
10
Date d'inscription
Statut
Membre
Dernière intervention
-
sirinebennaceur Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
sirinebennaceur Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Enregistrment des résultats obtenues dans un fichier csv en java
- Fichier bin - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
3 réponses
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...
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; } } }
Bonjour,
Quel serait le format du fichier CSV en sortie ?
Tu as un exemple de résultat attendu ?
Quel serait le format du fichier CSV en sortie ?
Tu as un exemple de résultat attendu ?
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. }}
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
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).
S'il y a besoin d'affiner le tri, on peut également passer un Comparator en paramètre de la méthode sorted()
ça marche merci bien :D