CMD Rückgabe durchlesen

REC

Bekanntes Mitglied
Ich habe hier ein Code gefunden welcher mir über die CMD die ganze IP Konfig ausliest und unten in die Eclipse Konsole schreibt. So weit so gut.

Nun würde ich aber gerne nur gewissw Zeilen aus lesen, wie zBeispiel "Physikalische Adresse" etc... und dann diese Daten extern in eine File speichern.

Kann mir jemand Tipps geben? Ich denke ich muss das irgendwie Zeile für Zeile durchgehen und irgendwie Delimeter benutzen. Kann mir da jemand Ansätze geben?

Hier der Code:
Java:
public class CMDLesen {
	
	  public static void main( String[] args ) throws IOException
	  {
	    ProcessBuilder builder = new ProcessBuilder( "cmd", "/c", "ipconfig/all"   );
	    builder.directory( new File("c:/Temp") );
	    Process p = builder.start();
	    Scanner s = new Scanner( p.getInputStream() ).useDelimiter( "\\Z" );

	    System.out.println( s.next() );
	  }
	}
 
Vielleicht,
Java:
String zeile = p.getInputStream().useDelimiter( "\\Z" );

statt

Java:
Scanner s = new Scanner( p.getInputStream() ).useDelimiter( "\\Z" );
 
[japi]NetworkInterface[/japi] ist für sowas zuständig ... da brauchst du dir nichts über ein terminal zusammenkleben ... kann java alles selbst
 
Ich habe mich eigentlich gestern mit dem NetworkInterface beschäftigt.

Aber ich habe im Web echt nichts gefunden wie ich DHCP, IPv6, Subnetzmaske,Standartgateway über NetworkInterface auslesen kann? Ich glaube das geht nicht.


Eigentlich hätte ich gehofft das mir jemand ein bisschen was über die Delimeter sagen kann. Da ich eigentlich Java Anfänger bin, da nützt es mir nunmal nicht viel wenn man nur Stichwortartig antwortet. Inwiefern hilft mir Contain um aus der CMD exakt das auszulesen was ich brauche?
 
Zuletzt bearbeitet:
Habe diesen Code gfunden. Aber wie gesagt, die Infos die ich brauche finde ich hier nicht. Also wenn ich eben die Methoden in Eclipse weiteranschaue. Auch hier habe ich eine Ausgabe und müsste mit das alles zusammenkleben. Nun ist doch die Frage was einfach ist?

Java:
public class MacAddress {
	int n = 0;

	public void Network() throws SocketException {

		Enumeration<NetworkInterface> netInter = NetworkInterface
				.getNetworkInterfaces();
		
		while (netInter.hasMoreElements()) {
			NetworkInterface ni = netInter.nextElement();

			System.out.println("NetworkInterface " + n++ + ": "
					+ ni.getDisplayName());

			for (InetAddress iaddress : Collections.list(ni.getInetAddresses())) {
				System.out.println("CanonicalHostName: "
						+ iaddress.getCanonicalHostName());

				System.out.println("IP: " + iaddress.getHostAddress());

				
				

				System.out.println("Loopback? " + iaddress.isLoopbackAddress());
				System.out.println("SiteLocal? "
						+ iaddress.isSiteLocalAddress());
				System.out.println();
			}
		}
	}
	
	public static void main(String[] args) throws SocketException{
		
		MacAddress m = new MacAddress();
		m.Network();
	}
}
 
um ganz erlich zu sein : java ist für solche sachen einfach die falsche sprache ... da sowas nunmal nicht system-unabhängig lösbar ist ...
vielleicht hilft dir JNA weiter ... bin mir sicher das es system-libs gibt die man laden kann um solche infos rauszubekommen ... aber n terminal-output zu parsen ist eher schlecht ...
 
Naja es ist eben ein Schulprojekt. Man muss Java verwenden.

Ok dann schaue ich mal JNA an. Aber ich habe kein Plan was System_libs sind und wie man die benutzt 🙂
 
OUCH ... und dann bist du freiwillig in den info-kurs gegangen in dem du programmieren/java lernen willst/sollst wenn du nicht mal weist was eine system-lib ist ? hmm ... na dann mal hals- und bein-bruch ... das kann lustig werden

englisch : Library (computing) - Wikipedia, the free encyclopedia
deutsch : Programmbibliothek ? Wikipedia
*wobei ich dir die englische variante empfehlen würde*

zu JNI/JNA

JNI : JavaNativeInterface -> ist ne schnittstelle um selbstgeschriebene libs anzubinden -> google
JNA : JavaNativeAccess -> ist ne schnittstelle um bereits vorhandene , externe unabhängige libs *wie eben auch z.b. system-libs* zu laden und zu verwenden -> google

*anmerkung : in den tiefen der VM wird JNI auch teilweise auf JNA abgebildet ... hier jedoch nur in soweit das aus vorhandenen informationen gewissen namens-konventionen gebildet und eingehalten werden ... was bei völlig "fremden" libs meist ziemlich schwer ist wann man die lib nicht kennt oder diese nicht dokumentiert ist ...
 
Ja meinst du mit diesen System-libs die ganzen Importanweisungen? Das kenn ich schon. Naja ansonsten ging das Programmieren bis jetzt ganz gut.

Aber aus diesem JNA werde ich nicht schlau... Das werde ich so nie zustande bringen. Im Web findet man echt nichts schlaues zu Java mit Netzwerkkomponenten. Unglaublich das dies heute noch so ist.
 
Die Methode useDelimiter() der Klasse Scanner setzt den Separator, der für die Aufteilung der Eingabe zu verwendet wird.

Wählt man das Datei-Ende ("\\Z") als Separator, wird die "Datei" mit einem next()-Aufruf vollständig gelesen.

Möchtest Du gewisse Werte aus der Ausgabe des Kommandos auslesen, musst Du die Eingabe parsen, also den String nach den Angaben suchen, die Dich interessieren.

Zeile für Zeile durchgehen
Java:
		String next = scanner.next(); 
		StringReader reader = new StringReader(next);
		BufferedReader lineReader = new BufferedReader(reader);
		String sLine = null;
		do {
			sLine = lineReader.readLine();
			if (sLine != null)
				System.out.println(sLine);
		} while (sLine != null);
 
Ja meinst du mit diesen System-libs die ganzen Importanweisungen? Das kenn ich schon. Naja ansonsten ging das Programmieren bis jetzt ganz gut

sag mal ... hast du dir eigentlich mal die beiden links durchgelesen ?

ich meine keine import-anweisungen für irgendwelche java klassen ... sondern SYSTEM-LIBs ... unter windows DLL .. unter unix SO ...
 
Danke Turtle für deine Antwort. Genau sowas habe ich gesucht.

Also die einfachste Methode um die Hardware auszulesen ist mit JACOB 1.7 die greift auf die Win32 zu und so kann man alle Daten auslesen.
Die Links habe mir nicht geholfen
 
Ich denke, dass solange es sich nur um ein Schulprojekt handelt und du den Code spezifisch für eine Plattform entwickelst kannst du getrost den Output vom ProcessBuilder parsen - elegant ist das natürlich nicht.
Falls dich eine elegantere Methode interessiert solltest du dich - wie irgendjemand schon vorgeschlagen hat - über JNA informieren; damit kannst du alle Systemfunktionen (wie auch das Abfragen von Informationen der Netzwerkschnittstellen) benutzen.
 

Zurück
Oben