antwort der eingabeaufforderung lesen

MScalli

Erfahrenes Mitglied
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
 
Zuletzt bearbeitet:
Hallo,

schau mal hier

Java:
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
 
Hallo,

ich würd's so machen:
Java:
/**
 * 
 */
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
 
@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
 
@ 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 ;)
 
Zuletzt bearbeitet:
Also hier ist nochmal das komplette Beispiel mit Toms zusammen kombiniert.

Java:
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
 
habs jetzt schon nach deinem gemacht ;)

Code:
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 ;)

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

sonst sagt er mir nen syntax fehler.
 
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
 

Neue Beiträge

Zurück