Batch Datei in Unterverzeichnis ausführen
lima-city → Forum → Programmiersprachen → Java
code
datei
entsprechend reagieren
ersten beispiel
erwarten
file
klasse ersetzen
ordner
pfad
plattform
programm
punkt
relativen pfad
richtigen verzeichnis
starten
string
system
test
url
verzeichnis
-
Hallo, ich bin gerade dabei ein Java Programm zu programmieren, der nach Benutzereingabe .bat Dateien ausführt
Also z.B. Eingabe: shutdown --> Java startet die shutdown.bat, der im unterverzeichnis bat liegt.
Das Programm soll als .zip Datei erhältlich sein und man soll es in jedem Verzeichnis, indem man es starten will starten können.
Ich weiß zwar wie man Programme ausführt( Desktop.getDesktop().open( new File("C:/Pfad") ); natürlich mit try/catch), aber ich will nicht C:/ angeben sondern einfach nur bat/shutdown.bat oder so. So einfach wie in HTML geht es leider nicht, gegoogelt habe ich schon, habe aber leider nichts Nützliches gefunden.
Könnt ihr mir helfen?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Am einfachsten wäre ja, wenn du weißt, wo deine JAR Datei liegt. Das kannst du sogar rauskriegen, auch wenn es relativ doof aussieht:
Path path = Paths.get(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI());
Damit hast du ein Path Object, welches auf den Pfad deiner Main Klasse zeigt. Du musst das "Main" jetzt nur durch den Namen deiner Main-Klasse ersetzen.
Dann kannst du später einfach
sagen, um den Pfad relativ zu bekommen.path.resolve("./folder/shutdown.bat);
Du könntest auch
versuchen, das ist aber die CWD des Nutzers, und zeigt nicht immer genau auf den Pfad der JAR Datei.System.getProperty("user.dir")
Mit dem ersten Beispiel sollte es eigentlich gehen (ungetestet).
Liebe Grüße -
Danke für die Hilfe, es funktioniert!
Mit folgendem Code:
public static void main(String[] args) throws Exception {
Path path = Paths.get(Start.class.getProtectionDomain().getCodeSource().getLocation().toURI());
String url= path.toString()+"\\ausfuehren\\test\\test.bat";
System.out.println(url);
try{
Desktop.getDesktop().open( new File(url) );
}
catch(Exception /* IOException, URISyntaxException */ e){
e.printStackTrace();
}
}
-
Der Vollständigkeit halber:
1)
ist nicht der Weg, wie man Programme aus Java heraus startet. Dafür gibt es Runtime.exec() sowie den ProcessBuilder. Grund: wenn man Java Headless nutzt (also Java auf einem System ohne grafischer Oberfläche ausführt), dann funktioniert die Desktop-Klasse nicht.Desktop.getDesktop().…
2) Gibt man bei exec() oder beim ProcessBuilder nur einen relativen Pfad an, ist er relativ zum CWD, genau so wie man es sich erwarten würde.
3) Plattform-Unabhängigkeit geht verloren, sobald man sowas wie eine bat-Datei starten will. Startet nun jemand dieses Java-Programm dennoch auf einer anderen Plattform (in dem Fall z.B. Linux), so gibt es Probleme. Um das zu verhindern, solltest du prüfen, ob das Programm gerade auf Windows läuft, und falls es das nicht tut, entsprechend reagieren.
4) Um Code hier lesbar zu formatieren, gibt es das
-Tag.[code]
-
Du darfst aber nicht außer acht lassen, dass die CWD nicht der Ort ist, wo die Dateien liegen.
Wenn du die Datei /etc/project/prog.jar starten möchtest, kannst du dies ja letztendlich mit
starten, wenn du im richtigen Verzeichnis bist, wenn du aberjava -jar prog.jar
ausführst, kann die CWD sogar der Home-Ordner sein. Dementsprechend wäre es schon besser, den Pfad der JAR zuerst rauszufinden. Leider kenne ich keinen anderen Weg, als über den Sourcecode.java -jar /etc/project/prog.jar
Dementsprechend ist es sicherer mit absoluten Pfaden zu arbeiten.
Alle anderen Punkte sind absolut valid. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage