J'ai un exécutable natif unix qui oblige les arguments à nourrir comme celui-ci
prog.exe
blockQuote> foo.txt a deux lignes: bar Baz P>
J'utilise java.lang.processBuilder pour exécuter cette commande. Malheureusement, PROG.EXE ne fonctionnera que sur le redirection d'un fichier. Y a-t-il une manière que je peux imiter ce comportement en Java? P>
bien sûr, p>
xxx pré> ne fonctionne pas. P>
merci! p> p>
5 Réponses :
Avez-vous essayé d'envelopper Si je comprends votre problème, le script ressemblerait à: p> prog.exe code> dans un script qui accepte des arguments et de traiter avec
prog.exe code>?
Je suppose que vous utilisez une coquille, il est donc assez simple de configurer un script Bash.
#!/usr/bin/bash
echo $1 > file
echo $2 >> file
prog.exe < file
remove file
Ce serait bien, mais le point de ceci est de porter de Unix à Windows. Donc, je n'aurai pas de coquille sur la nouvelle plate-forme.
La redirection est configurée par la coquille dont vous avez besoin pour le faire manuellement, quelque chose comme ça:
Process proc = pb.start(); OutputStreamWriter os = new OutputStreamWriter(proc.getOutputStream()); // then write the data from your file to os // ... os.close();
ProcessBuilder pb = new ProcessBuilder("prog.exe"); Process p = pb.start(); OutputStream pos = p.getOutputStream(); InputStream fis = new FileInputStream("file.txt"); byte[] buffer = new byte[1024]; int read = 0; while((read = fis.read(buffer)) != -1) { pos.write(buffer, 0, read); } fis.close(); Not tested, but something like this should work.
Dans mon cas (JDK 6), je devais utiliser le constructeur InputStream qui prend un fichier. La chaîne avec le chemin n'a pas fonctionné pour moi. Merci Marc. E.g.: Inpurstream FIS = nouveau fichierInputtream (nouveau fichier ("/ chemin / chemin / fichier.txt"));
Vous pouvez également utiliser pb.redirectinput (fichier);
Créez le processus à l'aide d'un Ouvrir Le fichier utilisant des techniques de Java normales, lisez le contenu du fichier et écrivez-le sur la sortie code> sur le processus que vous avez effectué avec le Le problème que vous avez en ce moment est que vous appelez le ce qui n'est probablement rien près de ce que vous voulez réaliser. p> p> ProcessBuilder code>, puis utilisez
process.getoutPutStream () code>
pour obtenir une sortie de sortie qui conduira à l'entrée standard du processus. ProcessBuilder code>. p>
processbuilder code> pour lancer p>
J'ai fini par faire quelque chose comme ça et ça marche. Merci pour votre aide!