beim Programmstart soll mein Programm einen Ordner in dem Verzeichnis anlegen, in dem sich das Programm befindet. Unter Windows klappt das ohne Probleme. Unter Linux (Ubuntu) wird der Ordner jedoch immer im Home Verzeichnis des Users erstellt.
Egal, ob ich dabei
Java:
this.getClass().getResource("/")
zum ermitteln des Pfades verwende oder einfach nur
Java:
File f =newFile("tmp");if(!f.exists()){
f.mkdir();}
angebe.
Habe leider nicht allzu viel Ahnung von Linux - Was mache ich falsch?
Ohne Pfadangabe sollte ich doch in das Verzeichnis schreiben, in dem sich das compilierte Programm befindet.
Auch mit Pfadangabe
Java:
File f =newFile(this.getClass().getResource("/")+"tmp");
wird ja in das Home Verzeichnis geschrieben.
Zu den Rechten: Wäre bestimmt eine Möglichkeit. Aber zumindest von Hand kann ich dort Ordner anlegen, wo sich das Programm befindet (z.B. in einem Ordner auf dem Desktop).
Nein, du schreibst in das Arbeitsverzeichnis, in welchem dein Programm gerade ausgeführt wird. Das wird zwar (zumindest unter Windows) fast immer der Ort deines Programms sein, muss es aber nicht. Unter Linux wird womöglich unter gewissen Bedingungen immer das home-Verzeichnis als Arbeitsverzeichnis gewählt, ist aber nur geraten.
Ok, das wäre eine Erklärung.. Danke! Gibts denn eine Möglichkeit - bzw. welche - einen relativen Pfad anzugeben, welcher auf das Verzeichnis zeigt, in dem mein Programm sich befindet?
Es scheint tatsächlich am Ausführungort zu liegen. Wechsel ich zuvor per Shellscript in das Verzeichnis und rufe die jar so auf funktioniert es korrekt. Gehe ich per Dateiexplorer in den Ordner und führe die jar per Doppelklick aus, geht es nicht (dann scheint der Ausführungort im Home-Verzeichnis zu liegen).
Das wird zwar (zumindest unter Windows) fast immer der Ort deines Programms sein, muss es aber nicht. Unter Linux wird womöglich unter gewissen Bedingungen immer das home-Verzeichnis als Arbeitsverzeichnis gewählt, ist aber nur geraten.
Sehe ich genauso. Unter Windows startet man die meistens Programme mittels einer Verknüpfung. Wenn mal dort mal in die Eigentschaften schaut, so sieht man, dass im Standard das Arbeitsverzeichnis auf das Programmverzeichnis gesetzt ist.
Wenn man unter Windows auf der Kommandozeile "dir Desktop" aufruft, dann bezieht sich Desktop auch relativ auf das Verzeichnis, in welchem man sich gerade befindet, und nicht relativ vom Installationsort von "dir".
Das Problem liegt zu 99,99% darin, dass dein Programm unter Linux einfach anders aufgerufen wird.