Kommuniker med en Windows-batchfil (eller eksternt program) fra java

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg ved, at der er lignende tråde, og jeg har læst dem alle. Men ingen af ​​dem har været til nogen hjælp.


Jeg har denne enkle batchfil:


@echo off
set /p UserInput=Enter a number: 
echo Number was \%UserInput\%


Jeg vil køre denne batch-fil fra java, sende nummeret til det og få input.


Jeg har et mærkeligt problem. Jeg startede batchfilen ved hjælp af cmd/c, åbnede input- og udgangsstrømmene, men det blev stadig ikke arbejde. Når jeg kører et program, for eksempel 'cmd.exe', returnerer det det faktiske output, du får, når du åbner et CMD vindue:



  Microsoft Windows ... Copyright (c) 2009 Microsoft
  Virksomhed. Alle rettigheder forbeholdes.



Så koden arbejder i det mindste delvist. Men det giver mig simpelthen ikke noget output, når jeg bruger "cmd /c C:\test.bat" (hvor test.bat er en gyldig batchfil).


Dette er java-koden. Hvad er der galt med det?


      import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;

    public class Test {

        private static BufferedReader bufIn;
        private static BufferedWriter printOut;
        private static Process p;

        public static void main(String[] args) throws IOException {

            Runtime rt = Runtime.getRuntime() ;

            p = rt.exec("cmd.exe /c C:\test.bat");
            InputStream in = p.getInputStream() ;
            OutputStream out = p.getOutputStream ();

            bufIn = new BufferedReader(new InputStreamReader(in));
            printOut = new BufferedWriter(new OutputStreamWriter(out));

            int ch = 0;
            ch = bufIn.read();

            while (ch != 0) 
            {
                System.out.print((char) ch);
                ch = bufIn.read();
            }

            //send a command to 

            printOut.write("209");
            printOut.flush();

            while (ch != 0) 
            {
                System.out.print((char) ch);
                ch = bufIn.read();
            }



    //p.destroy() ;

    }


}


Jeg skulle få:



Please enter a number:
Number was 209



Rediger: Jeg redigerede koden, fordi det tilsyneladende stod fast på readLine mens der ikke var nogen linje :)


Alligevel har jeg stadig et problem.
Jeg får:


Enter a number: 


og intet andet, næsten som om output streamen slet ikke virker.

Bedste reference


I stedet for at bruge en PrintWriter, prøv en OutputStreamWriter indpakket i en BufferedWriter:


printOut = new BufferedWriter(new OutputStreamWriter(out));


Du skal selvfølgelig også ændre printOut til en BufferedWriter.


Det ser også ud til at du 'spyler og udskriver i den forkerte rækkefølge til mig, jeg gør det:


printOut.println("209");
printOut.flush();


Som et sidepunkt kan du bruge readLine() på BufferedReader i stedet for bare read()!