Wo referenz auf speicherort speichern?

Hey Leute.
Angenommen ich benötige in einem Projekt die möglichkeit, dass der user
zu einem pool aus bildern selbstständig weitere hinzufügt. Ich würde jetzt einfach einen ordner
irgendwo hinpacken, und dort die bilder speichern.
Nun möchte ich aber den benutzer selbst wählen lassen, wo dieser speicherort (eventuell auch von ein paar
config files oder soetwas) sein soll. Aber: Woher soll das Programm beim neustart dann wissen, wo dieser speicherort ist?

Ich sehe 2 Möglichkeiten:

A: Ich speichere irgendwo (im programm fest implementierter pfad) eine dummy datei ab, in der nur der verweis zu dem eigentlich speicherort steht
Nachteile: der benutzer weiß davon nichts, selbst wenn er alles löscht bleibt diese datei, also datenmüll

B: Ich speichere den speicherort IN der jar, muss diese also entpacken, verändern und wieder packen
Nachteile: Ein wenig umständlich und… overkill?

habt ihr weitere ideen? wie macht man soetwas “professionell” ?

Ich würde das so machen wie eigentlich alle Programme die ich so kenne: Speicherpfad fest vorgeben ohne das der Benutzer ihn ändern kann.
Ich kenn das von mir das ich am liebsten immer alles anpassbar machen will aber ich denke irgendwann kommt der Punkt da muss man was festlegen

Das ist eigentlich ganz einfach. Du speicherst den Speicherpfad in einer properties-Datei. Diese Datei liegt im Benutzerverzeichnis in einem fest vorgegebenen Pfad, den das Programm kennt und welcher nicht änderbar ist*. Beim Programmstart liest du die Datei aus und kennst dann den Speicherpfad für die Bilder.
Wenn du es besonders komfortabel möchtest, kannst du für die properties-Datei(en) commons configuration benutzen.

  • unter Windows landen die Daten normalerweise unter C:\Users\<Benutzername>\.<Programmname>\ und unter Linux in /home/<Benutzername>/.<Programmname>/. Allgemein läuft das auf System.getProperty("user.home") + FILE_SEPARATOR + ".meinProgramm"; hinaus.

Warum File Separator und dann im String dahinter noch “/”? Ist das nicht irgendwie doppelt gemoppelt oder überseh ich da was?
Für sowas würd ich dann auch einfach new File(String,String); machen sollte ja den selben Effekt haben

SEP ist auf Linux, Wind, Mac ein zwei Zeichen unterschiedlich, das stimmt schon so, Danke für Tipp, Jahr recomp. auch interessant. Grüße

Nein, du hast recht. Ich hatte das nur versehentlich mit drin und wegeditiert, während du deinen Beitrag verfasst hast. Praktisch funktioniert es auch, wenn man immer / als file separator verwendet. Eigentlich habe ich das auch nur noch dazugeschrieben, weil ich verdeutlichen wollte, dass der Anfang des Pfades unbedingt aus System.getProperty("user.home") kommen sollte.

*** Edit ***

Wenn man ein [japi]File[/japi]-Objekt braucht, dann ist das auch sinnvoll. Wenn man den Pfad allerdings als String braucht, würde ich entweder mit dem file.separator arbeiten, oder (eleganter) mit Paths#get(String first, String… more).

Ich selbst hab zwar noch nie was mit gemacht, aber man könnte es doch der VM überlassen : java.util.prefs.Preferences
Soweit ich mal was dazu gelesen habe wird durch diese Klasse ein OS-spezifischer Speicherort genutzt wie z.B. unter Windows die Registry (wenn das soweit stimmt was ich verstanden habe) oder unter Unix die entsprechenden Standard-config-Files.
In wie weit diese dann aber beim “de-installieren” mit aufgeräumt werden, ich denke da bleibt dann auch Datenmüll übrig.

Also eben die variante mit der dummy datei?
Okay :slight_smile:

Ich denke man kann ja ne art deinstallation bereitstellen, wenn der user die nicht benutzt hat er eben pech gehabt.

Dummydatei ist da wohl der falsche Ausdruck. Treffender wäre „Konfigurationsdatei“.

Okay, dann halt Konfigurationsdatei :stuck_out_tongue:

dummydatei flüster