2016-08-26 2 views
2

Ich versuche ein Programm in Java zu erstellen, das einige Informationen über den Computer sammelt, auf dem es ausgeführt wird. Ich erhalte die Informationen durch die Dinge mit wie:Java bestimmte Zeile von Runtime erhalten?

Process rt = Runtime.getRuntime().exec("ipconfig"); 

Im exec („ipconfig“) Befehl, es viel mehr Informationen gibt, die ich für speziell gefragt bin. Zum Beispiel brauche ich die IP-Adresse. In dem Befehl wird es als "IPv4" (oder etwas Ähnliches) bezeichnet. Ich habe BufferedReader verwendet, um den InputStream des Prozesses zu erhalten, und ich habe den InputStream in String konvertiert und den indexOf ("IPv4") erhalten. Leider ist das soweit ich kann. Ich muss es wieder in eine Zeichenfolge konvertieren, die nur die Zeile mit der Bezeichnung "IPv4" enthält.

Ich habe hier andere Fragen gefunden, die dem sehr ähnlich sind, aber ich kann sie nicht verstehen. Könnte jemand bitte erklären, wie man das genau im Detail macht?

Update: Ich muss dies von der Runtime-Methode tun. Ich weiß, dass ich die InetAddress-Methoden verwenden könnte, aber das ist nur ein Beispiel dafür. Ich werde andere Informationen aus der Laufzeit bekommen, und ich muß wissen, wie

+1

Wenn Sie zu dem Punkt, dass Sie verwendet haben 'indexOf' und hat es funktioniert, dann warum nicht einfach 'StringString()' und bekommen, was Sie wollen (vorausgesetzt, Sie kennen die Syntax von dem, was Sie wollen)? – Idos

+0

Sie könnten auch daran interessiert sein, andere Möglichkeiten zu suchen, dies zu tun. Wenn Sie diesen Befehl ausführen, funktioniert Ihr Programm nur unter Windows, glaube ich. Wie wäre es mit so etwas? http://stackoverflow.com/questions/8765578/get-local-ip-address-without-connecting-to-the-internet – ThePerson

+0

Sie können die Ausgabe mit 'grep' auf Ihre bevorzugte reduzieren. –

Antwort

2

Werfen Sie einen Blick auf diesen Java pattern matching tutorial ein grundlegendes Verständnis davon, wie die Pattern und Matcher Klassen arbeiten. Danach sollten Sie genug wissen Sie das folgende Beispiel zu verstehen:

public static String parseCommandOutput(String command, String regex, int group) { 
    Pattern pattern = Pattern.compile(regex); 
    Process process = Runtime.getRuntime().exec(command); 
    try(InputStreamReader inputReader = new InputStreamReader(process.getInputStream()); 
     BufferedReader buffReader = new BufferedReader(inputReader)) 
    { 
     String inLine = null; 
     while((inLine = buffReader.readLine()) != null) { 
      Matcher matcher = pattern.matcher(inLine); 
      if(matcher.find()) { 
       return inLine.substring(matcher.start(group), matcher.end(group)); 
      } 
     } 
     return null; 
    } 
} 

Für Ihr spezielles Problem, verwenden Sie die folgenden Eingangsparameter:

String command = "ipconfig"; 
String regex = "(IPv4 Address.*:)(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})"; 
int group = 2; 
String ipv4 = parseCommandOutput(command, regex, group); 
Verwandte Themen