# Programm starten mit Runtime aktuelles Verzeichnis wechseln



## Stefan1200 (4. Jan 2004)

Beim Ausführen eines Programmes mit


```
Runtime rt = Runtime.getRuntime();
rt.exec("programm.exe");
```

ist das aktuelle Verzeichnis ja das, in dem das Java Programm gestartet wurde.
Wie kann ich nun das aktuelle Verzeichnis zur Laufzeit beliebig ändern, damit das gestartete Programm seine eigene Dateien wieder findet?
Hat da jemand eine Idee?

Falls es nicht gehen sollte, gibt es irgendeine andere, nicht so elegante Lösung,
wie ich das hin bekomme?


----------



## Nobody (4. Jan 2004)

die dateien sind zb so angeordnet:
c:\unterordner\unterordner\exefiles\javafiles\

dann greifst du zb durch die definierung des aktuellen pfades über eine variable zu:

```
s="c:"+System.getProberties("file.sperator")+.......; //aktuelles verzeichnis
//änderung
s=.....; //halt die änderung
```

zugriff erfolgt dann halt über s


----------



## Stefan1200 (5. Jan 2004)

Und wie sage ich dann Runtime.exec, das er das Programm XYZ in dem Ordner ausführen soll?


----------



## Stefan1200 (5. Jan 2004)

Ich meine folgendes: Beim Starten von anderen Programmen mit Runtime.exec("bla"); ist der aktuelle Ordner ja weiterhin der Ordner, in dem das Java Programm gestartet wurde. Das externe Programm kann aber ja woanders liegen, in einem völlig anderen Ordner. Dann findet dieses eigene Programm nicht seine eigenen Dateien, die in seinem Ordner liegen. Das kommt zwar nicht bei jedem Programm vor, bei einigen aber schon.

Wie wechsle ich nun den aktuellen Ordner (auch Current Dir genannt), wenn ich Runtime.exec ausführe?


----------



## utnovetur (5. Jan 2004)

Eine nicht sehr elegante aber funktionierende Lösung ist es,
eine Batch-Datei zu schreiben,
die zunächst in das Verzeichnis der EXE wechselt und dann die EXE aufruft.

Meine EXE, die eine Datei im aktuellen Verzeichnis erstellt (in C geschrieben):

C:\hier\erstelle.exe

```
#include <stdio.h>

int main()
{
    fopen("Such.mich", "w");
    return 0;
}
```

Die Batch-Datei:

D:\da\los.bat

```
cd C:\hier
erstelle
```

Das Java-Programm:

E:\klassen\mist\Test.java

```
package mist;

class Test {
	public static void main(String[] args) throws Exception {
		Runtime.getRuntime().exec("D:\\da\\los.bat");
	}
}
```

Nach dem Aufruf von

java mist.Test

gibt es eine Datei 

C:\hier\Such.mich


----------



## Ebenius (5. Jan 2004)

*@Stefan: *Du weißt es doch eigentlich besser.

*@all: *  :!:  Man schaue in die Doku von _Runtime_ und finde zum Beispiel Runtime.exec(String command, String[] envp, File dir)  :!: 

Es grüßt Ebenius


----------



## Stefan1200 (6. Jan 2004)

Ebenius hat gesagt.:
			
		

> *@Stefan: *Du weißt es doch eigentlich besser.
> 
> *@all: *  :!:  Man schaue in die Doku von _Runtime_ und finde zum Beispiel Runtime.exec(String command, String[] envp, File dir)  :!:



Ja äh...das ist ja komisch.
Letzte Woche habe ich in der Api mehrmals den Bereich über Runtime und Process gelesen, irgendwie habe ich das "überlesen". Das ist mir ja fast peinlich ;-)

Als String Array envp kann ich auch null übergeben, oder wofür ist das gut?
Aus dem Satz
"envp - array of strings, each element of which has environment variable settings in format name=value"
ersehe ich nicht den genauen sinn dieser Möglichkeit.

Aber danke Ebenius, ich habe es in der API nicht gesehen, ich schwöre vorher den Part durchgelesen zu haben, aber irgendwie zu schnell oder es war zu spät, *g* ;-)

Naja, wofür habe ich denn euch, wenn ich Nachts um 3 Uhr son Text nicht richtig lese ;-)


----------



## Ebenius (6. Jan 2004)

Das sind die Environment Parameter (so ein Kram wie _PATH_, etc.)

Es grüßt Ebenius


----------

