(Effektives) Arbeitverzeichnis herausfinden

javango

Mitglied
Hallo,
ich will mein Programm in einem RasPi (Linux) automatisch starten lassen. Der Einzige gangbare Weg war für mich der Eintrag in einer .config7autostart/program.desktop datei.
Dabei muss man ja mit
Code:
java -jar /home/pi/meinVerzeichnis/programmName.jar
Problem: das Arbeitsverzeichnis ist nun usr/bin/java (das Java-Verzeichnis) und nicht das Verzeichnis in dem das Programm ist (z.B. /home/pi/meinVerzeichnis)!
Nun hab ich so vieles versucht, was aber entweder in Windows / Eclipse oder Linux immer andere Resultate lieferte. Folgende Dinge funktionieren nicht:
Code:
- System.getProperty("java.class.path");
- System.getProperty("user.dir");
- File f2 = new File( f1.getAbsolutePath());
Es muss doch einen Weg geben, den Pfad herauszufinden wo die Jar-Datei liegt, welcher in jedem system funktioniert?
Danke schon mal im Voraus!
 

mihe7

Top Contributor
das Arbeitsverzeichnis ist nun usr/bin/java (das Java-Verzeichnis) und nicht das Verzeichnis in dem das Programm ist (z.B. /home/pi/meinVerzeichnis)!
Das Arbeitsverzeichnis ist das eingestellte, im Zweifelsfall also das aktuelle.

Es muss doch einen Weg geben, den Pfad herauszufinden wo die Jar-Datei liegt,
Einfachste Möglichkeit: gib den Pfad als Argument mit.

Ansonsten: https://stackoverflow.com/questions/320542/how-to-get-the-path-of-a-running-jar-file

Wofür brauchst Du denn den Pfad?
 

javango

Mitglied
Hallo mihe7,
ja an die alten parameter hab ich nicht mehr gedacht. Ich hab mein Leben noch nie einen Parameter in einem Programm gebraucht. Dafür gibt es heutzutage schon seit Jahrzehnten elegantere Lösungen. Aber in Linux ist halt vieles noch old style. Manche hacken da am liebsten den ganzen tag auf der Konsule rum..

Egal, ich hab's ausprobiert und es würde funktionieren. Danke erstmal.

In der Zwischenzeit hab ich's anders gelöst. Wen's interessiert:
Code:
public class FileUtils {
  private static String workingDirectory;
  private static String fileSeparator;

  /*
   * This constructor finds the real! working path.
   * Tested with Eclipse, windows and linux
   * Note: working directory in Eclipse has to be in bin,
   * since this is the path of the eclipse program output.
   */
 
  static  {
    workingDirectory = System.getProperty("java.class.path");;  // used for Current Working Directory
    String[] strings = workingDirectory.split(";");
    workingDirectory = strings[0];
    if ((workingDirectory == null) || (workingDirectory.length() == 0)) { // in user directory
      workingDirectory = System.getProperty("user.dir");
    } else {
      if (workingDirectory.endsWith(".jar")) {
        int i = workingDirectory.lastIndexOf(getFs());
        if (i > 0) {
          workingDirectory = workingDirectory.substring(0, i);
        }
      }
    }
  }

  public static String getCwd(){
    return workingDirectory;
  }
}

Dies funktioniert dann in Eclipse zum Debuggen, auf Windows und Linux, egal wo und unter welchen Umständen man das Programm startet. Ob's mit Mac funktioniert weiss ich nicht.

Dies sind eben alles nur halbe Lösungen weil sie nur unter bestimmten Umständen funktionieren.

Wofür brauchst Du denn den Pfad?

Na, mein Programm braucht ein Config file, Daten, welche es ablegen muss usw. Und diese legt man am besten dort ab, wo das Programm selbst sitzt und nicht irgendwo.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
ja an die alten parameter hab ich nicht mehr gedacht. Ich hab mein Leben noch nie einen Parameter in einem Programm gebraucht. Dafür gibt es heutzutage schon seit Jahrzehnten elegantere Lösungen. Aber in Linux ist halt vieles noch old style. Manche hacken da am liebsten den ganzen tag auf der Konsule rum..
Auf was für Systemen arbeitest du denn, wenn Linux zu „old style“ ist und es seit Jahrzehnten bessere Lösungen als ganz normale Programm-Argumente gibt? o_O

Mir fällt ehrlich gesagt kein Programm auf meinem Rechner ein, welches keine völlig normalen Parameter/Argumente nutzt, und wüsste auch nicht, wie man die sinnvoll ersetzen könnte (und das seit Jahrzehnten anscheinend macht...)

Dies funktioniert dann in Eclipse zum Debuggen, auf Windows und Linux, egal wo und unter welchen Umständen man das Programm startet. Ob's mit Mac funktioniert weiss ich nicht.
[...]
Dies sind eben alles nur halbe Lösungen weil sie nur unter bestimmten Umständen funktionieren.
Deine Lösung wird auch unter manchen Umständen nicht funktionieren, vermutlich sogar nur unter noch spezielleren Umständen.
Es scheitert zB in 'nem Maven-Project unter Intellij, da kommt (wenn man den Classpath-Seperator anpasst, der nur unter Windows stimmt) das lib-Verzeichnis des JRE raus...

Na, mein Programm braucht ein Config file, Daten, welche es ablegen muss usw. Und diese legt man am besten dort ab, wo das Programm selbst sitzt und nicht irgendwo.

Seit Jahrzehnten ( ;) ) hat sich durchgesetzt, genau das nicht zu tun. "Best practice" ist es eher, Daten entweder im aktuellem Verzeichnis oder einem festen Verzeichnis anzulegen. Neben der Jar dürfte eher verwirrend sein.

Unter allen drei großen OSs gibts auf den üblichen Verzeichnissen für Programme ja nicht mal Schreibrechte für "nicht root"...
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Wie kann man herausfinden, wo der Wert herkommt ? Allgemeine Java-Themen 13
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
M Kameradaten bzw. Einstellungen herausfinden Allgemeine Java-Themen 9
Thallius Herausfinden ob ein externes Programm schon gestartet ist? Allgemeine Java-Themen 10
P Herausfinden, ob ein Process ein Fenster hat Allgemeine Java-Themen 1
D Type herausfinden Allgemeine Java-Themen 15
M System herausfinden Allgemeine Java-Themen 6
J Aktuellen Prozess herausfinden. Allgemeine Java-Themen 3
F Herausfinden ob nur 1 oder 0 in einem String ist. Allgemeine Java-Themen 4
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Benötigte Klassen herausfinden Allgemeine Java-Themen 11
B bereits gelesene Bytes herausfinden Allgemeine Java-Themen 10
Zettelkasten Aus String bestimmtes Zeichen herausfinden Allgemeine Java-Themen 19
E Standort des Programms herausfinden Allgemeine Java-Themen 4
V Calendar monatstage herausfinden? Allgemeine Java-Themen 2
M Username herausfinden? Allgemeine Java-Themen 2
Bloodredangel Zeitstempel von Dateien in Archiven herausfinden Allgemeine Java-Themen 2
H Decmal-Trenner, wie herausfinden Allgemeine Java-Themen 3
P Textfile Encoding herausfinden Allgemeine Java-Themen 2
B Herausfinden ob Datum existiert Allgemeine Java-Themen 2
G Globalen Programm-Ordner herausfinden Allgemeine Java-Themen 7
S Innerer Type einer generischen Collection herausfinden? Allgemeine Java-Themen 13
oltoko PID für das laufende Java Programm herausfinden Allgemeine Java-Themen 3
G Wildcards - Methoden herausfinden. Allgemeine Java-Themen 7
D Benutzerrechte herausfinden Allgemeine Java-Themen 3
G System32 Folder herausfinden Allgemeine Java-Themen 5
D Herstelldatum eine Datei herausfinden Allgemeine Java-Themen 7
U Benutzer herausfinden Allgemeine Java-Themen 3
E Frequenz des Monitors herausfinden Allgemeine Java-Themen 12
Q Aktuelles Verzeichniss herausfinden. Allgemeine Java-Themen 2
V oberste klasse herausfinden. Allgemeine Java-Themen 21
P Java JRE herausfinden Allgemeine Java-Themen 2
G Standard-Browser herausfinden Allgemeine Java-Themen 4
W Herausfinden, wo das Programm liegt. Allgemeine Java-Themen 8
J Document_Root des Webordners herausfinden Allgemeine Java-Themen 2
F Parameter Name herausfinden Allgemeine Java-Themen 25
T aus .cda File Titel und Sänger herausfinden Allgemeine Java-Themen 6
T angemeldeten usernamen herausfinden Allgemeine Java-Themen 4
C Java-Version herausfinden Allgemeine Java-Themen 9
R Geschwindigkeit herausfinden Allgemeine Java-Themen 2
G Speicherauslastung herausfinden Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben