# antwort der eingabeaufforderung lesen



## MScalli (18. September 2007)

hi leutz.
Ich will zur laufzeit eine antwort der eingabeaufforderung(Server) im java programm anzeigen.

z.B. 

try
{
    Process process = Runtime.getRuntime().exec("cmd /c net time \\\\\Servername" );
} 
catch (Exception ex) 
{
    /* do nothing */
}

wenn ich die zeile eintippe bekomme ich zurück " Aktuelle Zeit Auf \\Server ......"
diese Antwort muss ich doch irgendwie in Java einlesen können!!

schon mal Thx@ all   die ne idee haben


----------



## zerix (18. September 2007)

Hallo,

schau mal hier


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class ProcessReaderExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ProcessBuilder builder = new ProcessBuilder();
		builder.command(new String[]{"java"});
		builder = builder.redirectErrorStream(true);
		
		try {
			Process process = builder.start();
			BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
			String text;
			while((text = br.readLine()) != null)
				System.out.println(text);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
```

MFG

zEriX


----------



## Thomas Darimont (18. September 2007)

Hallo,

ich würd's so machen:

```
/**
 * 
 */
package de.tutorials;

import java.util.Scanner;

/**
 * @author Thomas.Darimont
 *
 */
public class ReadProcessOutputExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        Process process = new ProcessBuilder("java").redirectErrorStream(true).start();
        Scanner scanner = new Scanner(process.getInputStream());
        while(scanner.hasNextLine()){
            System.out.println(scanner.nextLine());
        }
        System.out.println(process.waitFor());
    }
}
```

Gruß Tom


----------



## zerix (18. September 2007)

@Tom
Gibt es da einen Nachteil, dass bei mir der BufferedReader verwendet wird, bzw aus welchem Grund würdest du eher den Scanner benutzen?

MFG

zEriX


----------



## MScalli (18. September 2007)

@ zerix
also deine lösung gibt was zurück, aber nicht wenn ich jetzt z.B. das mit
"net time \\\\Servername" aufrufe
mit "java" oder "cmd" seh ich was geantwortet wird

Fehlermeldung ist

java.io.IOException: Cannot run program "net time \\Servername": CreateProcess error=2, Das System kann die angegebene Datei nicht finden
	at java.lang.ProcessBuilder.start(Unknown Source)
	at TimeServer.main(TimeServer.java:14)
Caused by: java.io.IOException: CreateProcess error=2, Das System kann die angegebene Datei nicht finden
	at java.lang.ProcessImpl.create(Native Method)
	at java.lang.ProcessImpl.<init>(Unknown Source)
	at java.lang.ProcessImpl.start(Unknown Source)
	... 2 more

Servername habe ich per Hand rein geschrieben 

@ Thomas
leider funktoniert deins bei mir gar nicht
da will er diese Zeile nicht

Process process = new ProcessBuilder("java").redirectErrorStream(true).start();

The Constructor ProcessBuilder(String) ist unbekannt

aber erst mal danke das ihr es euch anschaut


----------



## zerix (18. September 2007)

Schau mal hier

```
builder.command(new String[] { "net", "time", "//Servername" });
```

MFG

zEriX


----------



## zerix (18. September 2007)

Also hier ist nochmal das komplette Beispiel mit Toms zusammen kombiniert.


```
import java.util.Scanner;

public class ProcessReaderExample
{

  /**
   * @param args
   */
  public static void main(String[] args)
  {
    ProcessBuilder builder = new ProcessBuilder(new String[] { "net", "time","//Servername" }).redirectErrorStream(true);

    try
    {
      Process process = builder.start();
      Scanner scanner = new Scanner(process.getInputStream());
      while (scanner.hasNextLine())
      {
        System.out.println(scanner.nextLine());
      }
      System.out.println(process.waitFor());
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

}
```

MFG

zEriX


----------



## MScalli (18. September 2007)

habs jetzt schon nach deinem gemacht 


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TimeServer 
{
    public static void main(String[] args) 
    {
        ProcessBuilder builder = new ProcessBuilder(args);
        builder.command(new String[] { "net", "time", "\\\\Servername" });
        builder = builder.redirectErrorStream(true);

        try 
        {
            Process process = builder.start();
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String text;
            while((text = br.readLine()) != null)
                System.out.println(text);  
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}
```

vielen vielen dank für die rasche hilfe..
und diese zeile bisschen anderst 


```
builder.command(new String[] { "net", "time", "\\\\Servername" });
```

sonst sagt er mir nen syntax fehler.


----------



## Thomas Darimont (18. September 2007)

Hallo,

da ich da varargs benutzt habe musst du in deinem Java Editor / Compiler auch das Source Level auf java 5 stellen...


> Gibt es da einen Nachteil, dass bei mir der BufferedReader verwendet wird, bzw aus welchem Grund würdest du eher den Scanner benutzen?


1) Kürzer
2) Einfacher zu verstehen
3) Eleganter

Gruß Tom


----------



## MScalli (19. September 2007)

wie auch immer..
also so schnell und gut wie das hier ging...
respekt!!


----------

