Executer une commande sur le cmd à travers java(eclipse)

Résolu/Fermé
somaya1 Messages postés 9 Date d'inscription lundi 17 mars 2014 Statut Membre Dernière intervention 24 mars 2014 - Modifié par KX le 26/08/2016 à 07:14
 Souma - 18 janv. 2017 à 08:44
Bonjour,
je veux executer ces deux commandes sur le cmd successivement
et afficher le resultat de cmd ('l'invite de commandes") dans un fichier

cd C:\Program Files (x86)\Indri\Indri 2.2\bin

puis
IndriRunQuery C:\Users\Zeyd\workspace\WebSem\test.txt

le code suivant est le code que j'ai essayé mais le fichier est vide malgrés que j'ai executé ces deux commandes sur le cmd et m' affiché le result.

ce m'affiche pas aucune message d'erreur mais le fichier resultat vide.

File f3=new File("result.txt");
String pthtest="C:\\Users\\Zeyd\\workspace\\WebSem\\test.txt";
 
 String command= "cmd  /c C:\\Program Files (x86)\\Indri\\Indri 2.2\\bin\\IndriRunQuery"+" "+ pthtest;
 
 try {
  Process child = Runtime.getRuntime().exec(command);
   child.waitFor();
      BufferedReader input =new BufferedReader(new InputStreamReader(child.getInputStream()));
      BufferedWriter output=new BufferedWriter(new FileWriter(f3));   
   while((line = input.readLine()) != null)
  try{
    System.out.println("line"+line);
    output.write(line);
    output.write("\r\n"); 
    output.flush();
    output.close();
    
   }
 } catch (IOException e) {
  
  e.printStackTrace();
 } catch (InterruptedException e) {
 
  e.printStackTrace();
 }

mem si vous n'avez pas idée sur le role de ces deux commande
comment je execter deux commandes successivement.
et merciiiiiiiiiiiiiiiiiiii d'avance.
A voir également:

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
22 mars 2014 à 12:52
Récupère aussi le child.getErrorStream de ta commande, il peut contenir des valeurs.
0
somaya1 Messages postés 9 Date d'inscription lundi 17 mars 2014 Statut Membre Dernière intervention 24 mars 2014
22 mars 2014 à 13:13
j'ai pas bien compris ta reponse
mais j'ai fait System.out.println(child.getErrorStream())
il m'a affiché ça
java.io.FileInputStream@27573872
mais d'abord est ce que le code que j'ai executé en haut ne comporte pas d'erreur!!
et merciiiiiiiiii
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > somaya1 Messages postés 9 Date d'inscription lundi 17 mars 2014 Statut Membre Dernière intervention 24 mars 2014
22 mars 2014 à 13:42
Tu as remplis ton fichier avec
BufferedReader(new InputStreamReader( child.getInputStream()))
qui contient l'équivalent du System.out du programme que tu exécutes, moi je te dis de mettre aussi le
BufferedReader(new InputStreamReader( child.getErrorStream()))
qui contient l'équivalent du System.err et qui lui peut contenir des messages.

Sinon, avec ton programme il y aurait bien des choses à en dire, entre l'utilisation de BufferedReader, mais ça ne devrait pas empêcher ton programme de fonctionner.

Par contre ta commande "cmd /c C:\\Program Files (x86)..." à mon avis elle est fausse.
D'une part à cause des espaces dans "C:\\Program Files" qui fait que "cmd" va considérer "C:\\Program" et "Files" comme deux arguments différents. D'autre part l'utilisation même de "cmd" qui ne sert à rien. Il vaut mieux appeler directement le programme IndriRunQuery.

Quant au "cd" il se fait directement en passant un paramètre à exec. Les autres paramètres de exec permettent également de donner les arguments de la commande dans un tableau ce qui évite le problème avec les espaces comme dans "Program Files"

Je recommence :

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Test
{
    public static void main(String[] args) throws IOException, InterruptedException
    {
        File dir = new File("C:/Program Files (x86)/Indri/Indri 2.2/bin");
        String[] cmdArray = {"IndriRunQuery", "C:/Users/Zeyd/workspace/WebSem/test.txt"};
        
        Process proc = Runtime.getRuntime().exec(cmdArray, null, dir);
        
        PrintWriter out = new PrintWriter("C:/Users/Zeyd/workspace/WebSem/test_out.txt");
        Scanner scOut = new Scanner(proc.getInputStream());
        while (scOut.hasNextLine())
        {
            String line = scOut.nextLine();
            out.println(line);
            System.out.println(line);
        }
        out.close();
        scOut.close();
        
        PrintWriter err = new PrintWriter("C:/Users/Zeyd/workspace/WebSem/test_err.txt");
        Scanner scErr = new Scanner(proc.getErrorStream());
        while (scErr.hasNextLine())
        {
            String line = scErr.nextLine();
            err.println(line);
            System.err.println(line);
        }
        err.close();
        scErr.close();
        
        System.out.println("Exit Status : " + proc.waitFor());
    }
}
0
somaya1 Messages postés 9 Date d'inscription lundi 17 mars 2014 Statut Membre Dernière intervention 24 mars 2014
22 mars 2014 à 13:49
merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
ce code marche bien .
j'ai essayé aussi de changer la commande dans mon ancien code comme suit
String commande=cmd /c IndriRunQuery"+ pthtest;
et ça marche aussi.
comme vous avez dit le cd se fait automatiquement sans qu'on a besoin de lui donner le chemin.
merciiiiiiiiii encore.
0
SVP j'ai testé ce code il m'affiche un message d'erreur

..\src\Parameters.cpp(484): Had trouble parsing parameter file 'C:/Users/taibah university/Desktop/test.txt'
..\src\Parameters.cpp(399): NO XML in parameter text

quel est le problème car je suis débutante et j'ai moins d'informations
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
26 août 2016 à 07:17
Ce message d'erreur concerne du C++ pas du Java... à moins que ce ne soit l'affichage du deuxième programme (celui qui passe par le cmd) mais dans ce cas il va falloir en dire un peu plus.
0
Souma > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
18 janv. 2017 à 08:44
SVP j'ai pas compris votre réponse.

Maintenant j'ai cette erreur

"IndriRunQuery.cpp(715): Must specify a server or index to query against.
Exit Status : -1 "

SVP ça concerne à quoi? pouvez vous me donner le continu du fichier test.txt pour le comparer avec le structure de ma fichier

Merci d'avance
0