cmd Imputstream verarbeiten

janb14

Mitglied
Hey Leute ich hab ein Problem beim einlesen der einzelnen Zeilen der Windoof commandline.Es funktioniert alles wunderbar bis zu dem Punkt an dem das command line basierende Virensuchprogramm den Scan startet.Problem hierbei es ändert sich während des Scans immer nur die letzte Zeile wodurch diese nicht eingelesen wird.Gerade die ist aber besonders wichtig um Ergebnisse zu sehen.Hier einmal mein derzeitiger Einlesecode für die cmd:
Java:
package testing;
import java.io.*;
public class CMDtest {
	
	static public void executeCommand(String[] commandArr) {
	System.out.println("Windows command: "+ java.util.Arrays.toString(commandArr));
	 
	try {
	ProcessBuilder pb = new ProcessBuilder(commandArr);
	pb.redirectErrorStream(true);
	Process proc = pb.start();
	BufferedReader in = new BufferedReader(new InputStreamReader(
	proc.getInputStream()));
	System.out.println("Process started !");
	 
	String line;
	while ((line = in.readLine()) != null) {
	System.out.println(line);
	}
	 
	proc.destroy();
	System.out.println("Process ended !");
	} catch (Exception x) {
	x.printStackTrace();
	}
	}
}

und ich rufe das ganze mit folgendem auf :
Java:
String[] cmdArr = {"cmd","/c",Mainmenue.Tempdir + "emsisoft\\a2cmd.exe /smart"};
CMDtest.executeCommand(cmdArr);

Hier einmal ein Bild der Gui in welcher sich ein modifiziertes JTextArea Object befindet welches alle System.out.Printlns schluckt und darstellt:


Hier nun ein Bild der cmd im Normalbetrieb ohne Java Interaktion :

klar zu erkennen die Zeile mit Rocketdock welche sich ständig verändert und neue Objecte und Pfade angibt welche gescannt werden.

Zuguterletzt nocheimal ein Bild meines Programms nach ablauf des Scans :

klar auch hier zu erkennen die Entscheidene Zeile wird einfach ausgelassen und alles restliche ist wieder zu sehen.
???:L
Was soll ich jetzt tun?Irgendelche Ideen?

Update 20:15: :idea: OOOhhh was mir grade aufgefallen ist .Die Zeile wird gelesen.Auch immer wieder nur wird der String nicht getrennt und erscheint erst nach Ende des Prozesses als superlange Zeile in meiner Improvisierten Console :/ was nun?
hier ein Bild:
 
Zuletzt bearbeitet:

Anti-Banane2

Gesperrter Benutzer
das liegt daran das hier keine ZEILEN kommen (also kein \n enthalten auf des der Reader wartet) sondern mit einer bestimmten api immer nur einzelne ZEICHEN sowie STEUERCOMMANDOS ... die du so mit einem einfachen Reader halt nicht als "ZEILE" lesen kannst

versuche daher lieber sinnvoller das byte-weise lesen sowie ausfilter der steuer-commandos zwischen 0x00 und 0x20
 

janb14

Mitglied
also wäre deiner Meinung nach die beste Lösung den Inputstream in einen Bytebuffer laufen zu lassen und diesen wärend er befüllt wird bereits Byteweise wieder auszulesen?
 

janb14

Mitglied
Ok habs geschafft:toll:
danke für den Tipp hier jetzt die neue version ;)
Java:
package testing;
import java.io.*;
public class CMD {
	
	static public void executeCommand(String[] commandArr) {
		System.out.println("Windows command: "+ java.util.Arrays.toString(commandArr));
		 
		try {
			ProcessBuilder pb = new ProcessBuilder(commandArr);
			pb.redirectErrorStream(true);
			Process proc = pb.start();
			System.out.println("Process started !");
			 
			ByteArrayOutputStream baos = new ByteArrayOutputStream();				
			byte[] buffer = new byte[1024];
			int read = 0;
			while ((read = proc.getInputStream().read(buffer, 0, buffer.length)) != -1) {
				baos.write(buffer, 0, read);
				if (baos.size()>=100){
					System.out.println(new String(baos.toByteArray(), "UTF-8"));
					baos.reset();
				}
			}		
			baos.flush();	
			 
			proc.destroy();
			System.out.println("Process ended !");
		} 
		catch (Exception x) {
				x.printStackTrace();
		}
	}
}

wobei die lösung mit size >= 100 subobtimal ist lieber wäre mir eine trennung nach leerzeilen ...naja
 

janb14

Mitglied
Update 01.08.14 22.38 :
ok ich hab jetzt mal nen bisschen rumprobiert und bin zu folgenden Erkenntnissen gekommen:
1. die Zeile [JAVA=19]if (baos.size()>=100){[/code] hat sogut wie keinen Einfluss auf das Geschehen???:L
2.Ist es möglich Lücken teilweise mit .replace zu ersetzen weil es sich bei ihnen um Tabulator Schritte handelt.

Nun bleiben aber zwei andere Probleme bestehen:
1.Manchmal bestehen die Lücken aus Leerzeichen welche ich nicht so einfach ersetzen kann.



2.Teilweise wird die Zeile gesplittet und in zwei Zeilen ausgegeben.



Kann mir irgendwer Weiterhelfen?
Hier der derzeitige code :
Java:
package Utilities;
import java.io.*;
public class CMD {
	
	static public void executeCommand(String[] commandArr) {
		System.out.println("Windows command: "+ java.util.Arrays.toString(commandArr));
		 
		try {
			ProcessBuilder pb = new ProcessBuilder(commandArr);
			pb.redirectErrorStream(true);
			Process proc = pb.start();
			System.out.println("Process started !");
			 
			ByteArrayOutputStream baos = new ByteArrayOutputStream();				
			byte[] buffer = new byte[100];
			int read = 0;
			while ((read = proc.getInputStream().read(buffer, 0, buffer.length)) != -1) {
				baos.write(buffer, 0, read);
				System.out.println(new String(baos.toByteArray(), "UTF-8").replace("	", ""));
				baos.reset();
			}		
			baos.flush();	
			 
			proc.destroy();
			System.out.println("Process ended !");
		} 
		catch (Exception x) {
				x.printStackTrace();
				System.out.println(x.getMessage());
		}
	}
}
 

Anti-Banane2

Gesperrter Benutzer
naja ... wie gesagt : das grund-problem ist das hier halt mit speziellen steuerkommandos und ich denke auch ner passenden api darauf abgezielt wird das man halt den prozess nur in nem terminal startet ... das dann mit nem anderen nicht-terminal-programm zu lesen erfordert halt einiges an implementierung
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
denny86 NetBeans Ordnernamen rekursiv auslesen und in Variable verarbeiten Allgemeine Java-Themen 38
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
J Input/Output Word Datei einlesen, verarbeiten und abspeichern Allgemeine Java-Themen 3
F AWT Mehrere Tastatureingaben verarbeiten Allgemeine Java-Themen 5
agent47 JSON verarbeiten Allgemeine Java-Themen 4
G Threads Methode nebenbei ausführen, Status verarbeiten Allgemeine Java-Themen 4
J String verarbeiten und ausgeben Allgemeine Java-Themen 8
J Best Practice Java 8 Datei einlesen und verarbeiten Allgemeine Java-Themen 2
J unterschiedliche Dateiformate verarbeiten Allgemeine Java-Themen 7
DStrohma Input/Output KeyEvent nur verarbeiten wenn es ein "sichtbares" Zeichen ist? Allgemeine Java-Themen 1
H RXTX String verarbeiten Allgemeine Java-Themen 1
S XML lesen, verarbeiten, speichern klappt in Eclipse, aber nicht in der JAR Allgemeine Java-Themen 4
S Kommandozeilenargumente in aufgerufenden Batchjobs verarbeiten Allgemeine Java-Themen 6
P Sinnfragen, um eine riesige Verzeichnisstruktur zu durchsuchen und zu verarbeiten Allgemeine Java-Themen 20
E Excel Datei weiter verarbeiten Allgemeine Java-Themen 4
R SerialPort auslesen und Daten verarbeiten Allgemeine Java-Themen 23
M tar archive verarbeiten ohne zu entpacken Allgemeine Java-Themen 3
M HTML-Websiten verarbeiten Allgemeine Java-Themen 8
H Textdatei (1GB) einlesen und verarbeiten Allgemeine Java-Themen 15
W Datei auslesen und die Daten weiter verarbeiten Allgemeine Java-Themen 4
J Große Datei einlesen und gestückelt verarbeiten Allgemeine Java-Themen 4
N Serielle Schnittstelle / COM-Port auslesen und die empfangenen Daten verarbeiten Allgemeine Java-Themen 1
Q API zum Verarbeiten von HTML Allgemeine Java-Themen 4
Y Excel datei einlesen und inhalt verarbeiten Allgemeine Java-Themen 8
S Methode die Enums verarbeiten kann? Allgemeine Java-Themen 2
G Datei einlesen und in HashMap verarbeiten Allgemeine Java-Themen 3
D Inhalt eines Packages im Code verarbeiten Allgemeine Java-Themen 18
B Plaintext Integer einlesen und verarbeiten Allgemeine Java-Themen 3
C Mathefunktion zur Laufzeit einlesen und dann verarbeiten Allgemeine Java-Themen 13
Luma Daten ohne Blockierung des Hautprogramm verarbeiten Allgemeine Java-Themen 3
P Javaprogramm soll doppeltgeklickte Datei verarbeiten Allgemeine Java-Themen 22
C Variable aus einer Methode einlesen in einer verarbeiten und Allgemeine Java-Themen 6
V mouseClicked und mouseMoved gleichzeitig verarbeiten Allgemeine Java-Themen 14
P Programmm aufrufen und verarbeiten? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben