waitFor() qui reste bloqué... [résolu] - Java - Programmation
Marsh Posté le 27-07-2008 à 12:26:18
C'est logique. "Tout le contenu du fichier 2", çà doit faire pas mal d'octets. Du coup le buffer (Process.getInputStream() ) doit être plein et diff attend patiemment que tu en lises un peu avant de continuer.
L'utilisation de Runtime.exec n'est pas simple. Généralement, on crée un Thread qui lit l'output au fur et à mesure, même chose pour le flux d'erreur.
En gros, qqchose comme :
Process p = Runtime.getRuntime().exec(myCommande);
StreamPumper errorPumper = new StreamPumper( p.getErrorStream() );
StreamPumper outPumper = new StreamPumper( p.getInputStream() );
new Thread( errorPumper ).start();
new Thread( outPumper ).start();
InputStream input = p.getInputStream();
p.waitFor();
StreamPumper, à l'origine vient de ant. Tu dois pouvoir en trouver une implémentation facilement (attention à respecter la licence).
Dans apache commons, il y a commons-exec mais je crois qu'il n'y a jamais eu de release.
Marsh Posté le 27-07-2008 à 21:54:59
http://ydisanto.developpez.com/tutoriels/j2se/runtime/
Marsh Posté le 28-07-2008 à 03:00:18
regarde plutot pour faire des checksum sur les 2 fichiers et les comparer? ca me parait plus clean
Marsh Posté le 28-07-2008 à 23:50:39
Ok, merci beaucoup pour vos réponses !
J'ai utilisé un thread, ça fonctionne très bien.
Marsh Posté le 25-07-2008 à 18:24:32
Bonjour,
Sous java, je lance une commande unix pour comparer deux fichiers (cf ci-dessous). Cela fonctionne quand les fichiers sont correctement remplis. Par contre, si je mets à blanc le fichier 1. Le waitFor reste bloqué. Je ne comprends pas pourquoi (en faisant la commande dans un terminal, elle fonctionne et me retourne tout le contenu du fichier 2, logique !).
D'où mes 2 questions :
- quelqu'un sait-il pourquoi ça bloque ?
- quel serait le moyen de sortir du waitFor ?
Voilà mon petit bout de code :
// Calcul des differences
String myCommande = "diff -C 0 " + fichier1 + " " + fichier2;
Runtime myRuntime = Runtime.getRuntime();
Process myProc = myRuntime.exec( myCommande );
// Recuperation du code retour de la commande
codeRetour = myProc.waitFor();
@+
Message édité par ib@w le 01-08-2008 à 15:57:28