2010-08-22 13 views
3

je (en java),pourquoi je ne peux pas utiliser les fichiers journaux dans Java Runtime

rt.exec("qq.exe -i ..(some other parameters) > qq.log");//*1 

quand je lance QQ.exe -i .. (autres paramètres)> qq.log dans le terminal Il fonctionne très bien et conserve le fichier qq.log correctement. Toutefois, l'utilisation de rt.exec (* 1) ne fonctionne pas. "qq.log" partie provoque un problème. Quand je supprime cette partie rt.exec (* 1) fonctionne mais je ne peux pas avoir le fichier qq.log cette fois.

Quelles sont les causes de ce problème et y at-il des soln ??

Répondre

3

rt.exec() ne peut pas exécuter le code sh/bat. C'est juste d'invoquer un autre programme. Lorsque vous essayez de rediriger le flux de sortie de qq.exe avec le symbole >, qui est spécifique à shell, Java ne comprend pas quoi faire.

Une alternative est lorsque vous exécutez un programme avec la méthode exec, obtenez le Process retourné par rt.exec(). Un Process peut vous donner un OutputStream à l'application, un InputStream de l'application et même un ErrorStream pour une application démarrée. Avec InputStream, vous pouvez lire par programme le résultat de qq.exe et tout ce que vous avez à faire est de l'écrire dans un fichier.

+1

beaucoup beaucoup. Correction mineure: ce n'est pas OutputStream, c'est InputStream. Les sorties des programmes vont dans InputStream. OutputStream est nos sorties entrant dans le programme ... – ogzylz

0

Java 7 a ajouté la classe ProcesBuilder.Redirect qui permet de rediriger les flux d'entrée/sortie/d'erreur vers/à partir de fichiers. Il peut être utilisé comme ceci:

ProcessBuilder builder = new ProcessBuilder("cat", "/proc/meminfo"); 
    // Append all errors from process to log file: 
    builder.redirectError(Redirect.appendTo(new File("/tmp/my.log"))); 
    Process process = builder.start(); 

En utilisant les méthodes correspondantes, vous pouvez rediriger l'entrée et la sortie. L'exemple complet est ici: Run external process in Java 7.