kostenloser Webspace werbefrei: lima-city


Batch Datei in Unterverzeichnis ausführen

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    user012

    user012 hat kostenlosen Webspace.

    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?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. g****e

    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
    path.resolve("./folder/shutdown.bat);
    sagen, um den Pfad relativ zu bekommen.

    Du könntest auch
    System.getProperty("user.dir")
    versuchen, das ist aber die CWD des Nutzers, und zeigt nicht immer genau auf den Pfad der JAR Datei.

    Mit dem ersten Beispiel sollte es eigentlich gehen (ungetestet).

    Liebe Grüße
  4. Autor dieses Themas

    user012

    user012 hat kostenlosen Webspace.

    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();
    }

    }
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Der Vollständigkeit halber:
    1)
    Desktop.getDesktop().…
    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.

    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
    [code]
    -Tag.
  6. g****e

    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
    java -jar prog.jar
    starten, wenn du im richtigen Verzeichnis bist, wenn du aber
    java -jar /etc/project/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.

    Dementsprechend ist es sicherer mit absoluten Pfaden zu arbeiten.

    Alle anderen Punkte sind absolut valid.
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!