Java-Shell-Probleme

OberPinsel

Grünschnabel
Salü All

Ich kämpfe seit einiger Zeit mit ein paar Zeilen Code und komme einfach nicht weiter! ich hoffe, es gibt da draussen jemand, der mir helfen kann! Zum Problem:

Ich muss aus einem Office-Dokument die Eigenschaften auslesen können (Author, Vorlage, Titel, zuletzt geänder von....). Zuerst dachte ich, ich müsse alles über 'ne COM-Brücke laufen lassen doch dann fand ich ein netten kleines Progrämmchen, welches mir die Attribute in der Konsole ausgibt. Das Programm braucht als Parameter den Namen des Dokuments. So weit so gut. In der Konsole lauft es perfekt. Ich konnte die Ausgabe in einen Textfile umleiten, genau das was ich brauche. Also dachte ich, ich starte es mal aus Java aus mit dem exec()-Command. Doch es schlug fehl, da ich die Befehle in einen einzigen String gespeichert habe, und offenbar ist es so, dass exec den String in einzelne Strings zerlegt und nacheinander ausführt, was in diesem Fall nicht klappen kann. Danach fand ich im Internet einige Tipps und Tricks zu dem Thema. Alles deutete darauf hin, dass ich mein String-Befehl in einem String Array speichern muss und danach sollte es funktionieren. Doch leider sehe ich immer noch rot (Error-Meldung in Eclipse: I/O Exception: Creating Process: blablablablabla: Error=123 oder manchmal error=2). Genau gesagt, wenn ich mein Array aus nur zwei Strings bilde, dann sehe ich die Ausgabe in der Eclipse-Konzole. Wenn ich jedoch einen dritten String hinzufüge ("> c://textfile.txt") tauchen die oben erwähnten Fehlermeldungen aus. Ich habe noch versucht, den Compiler von 1.4 auf 1.3 zu ändern, aber nix half.

Hat jemand schon das gleiche Problem gehabt? Weiss jemand, wie ich die Ausgabe sonst noch in einen Textfile umleiten könnte?

Vielen Dank im Voraus für eure Hilfe und Gruss.
 
Hallo!

Dein Problem ist, das das Umlenkungszeichen ">" eigentlich ein spezielles Zeichen für die Shell ist (Veranlasst eben das Umleiten eines Datenstromes),
jedoch kann die Shell dieses Zeichen in dieser Aufrufart nicht interpretieren, deshalb kommts zu deinem Fehler ...
Warum leitest du die Ausgabe des Konsolen Programms nicht auch noch mit Java in eine date um?

Beispiel ...

Code:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

/*
 * Created on 18.03.2004
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class OutputDeflector {

	public static void main(String[] args) {
		new OutputDeflector().doIt();
	}

	/**
	 * 
	 */
	private void doIt() {
		// TODO Auto-generated method stub

		Runtime r = Runtime.getRuntime();
		Process p = null;
		BufferedReader br = null;
		FileWriter fw = null;
		BufferedWriter bw = null;
		try {
			p = r.exec("cmd /c ipconfig");
			p.getOutputStream().close();
			br = new BufferedReader(new InputStreamReader(p.getInputStream()));

			String line = null;
			fw = new FileWriter("c:/output.txt");

			bw = new BufferedWriter(fw);

			while ((line = br.readLine()) != null) {
				System.out.println(line);
				bw.write(line+"\r\n");

			}
			bw.flush();
			fw.flush();
			bw.close();
			fw.close();
			br.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Gruß Tom
 
Hallo Thomas,

Genau das, was ich gesucht habe! Du weisst gar nicht, wie sehr du mir damit geholfen hast. DANKE VIEEEEEELMALS!

So einfach, und dabei habe ich die halbe Welt schon gefragt, und keine Sau wusste es. Nicht mal die Professoren, welche schon Jahrelang Java und C++ unterrichten. Du bist unbestritten der OberGuru :-)

Gruss,
Ahmet
 
Auch von mir vielen Dank!

Endlich weiß ich, wie ich Konsolen-Befehle in Java mache.

Ich arbeite gerade an einem Projekt, was aus mehreren Prozessen besteht. Die sind noch recht lose verbunden und müssen einzeln gestartet werden. Jetzt kann ich eine zentrales Programm schreiben, was alles handhabt und das manuelle Konsolen-gehacke vermeidet.
 
Zurück