Speichern von Einstellungen

mabuhay

Bekanntes Mitglied
Hallo

Ich habe ein paar generelle Fragen zum Speichern von Einstellungen einer Java-Applikation. Ich habe schon etliche Posts über Relative Pfade etc. durchgeschaut, aber die richtige Antwort noch nicht gefunden.

Also das naheliegendste ist ja eine Datei im gleichen Ordner der .jar-Datei zu Speichern. Eine zweite Möglichkeit ist im Home-Verzeichnis des Benutzers (z.B. /home/user/.javaapp bei Linux) oder irgendwo in C:/Dokumente und Einstellungen/user bei Windows (bei Mac kenne ich mich nicht aus).

Das Speichern einer Datei im gleichen Ordner wie die .jar-Datei ist scheinbar nicht ganz einfach, da der Pfad zur .jar nicht einfach so zu ermitteln ist (kommt ja immer darauf an von wo aus die .jar ausgeführt wurde -> arbeitspfad). Es wäre aber Praktisch da die Einstellungen somit auch einfach gelöscht werden können wenn die .jar gelöscht wird.

Das Speichern einer Datei unter /home/user oder wo auch immer in Windows ist da einfacher da der Pad ja per user.dir ermittelt werden kann. Aber bei Windows bekomme ich mit user.dir z.B. C:\Documents and Settings\user, möchte die Einstellungen aber in C:\Documents and Settings\Application Data Speichern. Einfach den Pfad anzugeben geht nicht, da es beim englischen Windows ja anders heisst als beim deutschen.
Wenn ich nun die Einstellungen an einem solchen Ort Speichere und die .jar lösche, liegen die Einstellungen ja immer noch irgendwo rum, was nicht so schön ist.

Wie löst ihr das normalerweise mit Konfigurationsdateien? wo und wie Speichert ihr die?

mfg
 

Wildcard

Top Contributor
Einfacher ist es oft überhaupt nicht mit Dateien zu arbeiten, sondern den Java Preference Store zu benutzen. Brauchst du denn zwingend Dateien?
 

mabuhay

Bekanntes Mitglied
Nein, eigentlich brauche ich keine Dateien. Habe gar nicht gewusst dass es eine solche Möglichkeit ohne Datein in Java gibt. Ich verwende auch java.util.prefs.Preferences, lade und schreibe die aber immer aus/in eine Datei.

Habe hier eine Beschreibung gefunden: Preferences : Java Glossary

Wie ist das dann genau mit diesen Preferences? Die werden dann immer dort gespeichert bleiben? muss man die auch irgendwann löschen oder können die auch immer dort bleiben, also zum Beispiel wenn das Java-programm gar nicht mehr verwendet wird? Irgendwie sammelt sich da dann ja all der Müll an von Einstellungen nicht mehr verwendeter Programme.

mfg
 
Zuletzt bearbeitet:

nixnick

Mitglied
ich verwende dazu sehr gerne die methode loadFromXML aus Properties:

Java:
Properties settings;

public void readSettings()
    {
        try {
            File file = new File("settings.xml");
            if(file.canRead())
            {
                try{
                    settings.loadFromXML(new FileInputStream(file));
                } catch(java.util.InvalidPropertiesFormatException e)
                {
                    readDefaultConfig();
                    saveSettings();
                }
            } else {
                if(file.exists())
                {
                    System.out.println("ERROR: CANNOT READ CONFIG FILE");
                } else {
                    file.createNewFile();
                }
            }
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex)
        {
            ex.printStackTrace();
        }
    }
    public void saveSettings()
    {
        try {
            File file = new File("settings.xml");
            if(file.canRead())
            {
                file.delete();
                settings.storeToXML(new FileOutputStream(file), null);
            } else {
                System.out.println("ERROR: CANNOT READ CONFIG FILE");
            }
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }
großer vorteil: diese methoden erstellen eine datei settings.xml im verzeichnis der jar, welche sehr übersichtlich und auch gut manuell zu bearbeiten ist.
man kann sie natürlich auch noch woanders hinschieben:
[JAVA=6]
File file = new File(System.getProperty("user.home")+"/settings.xml");
[/code]
 
Zuletzt bearbeitet:

mabuhay

Bekanntes Mitglied
Das ist eben genau mein Problem. Dein Beispiel mit
Java:
 File file = new File("settings.xml");
Speichert nur dann im Ordner des .jar-Files, wenn es auch dort gestartet wurde.
Linux als beispiel: Doppelklick auf die .jar-Datei würde deine settings.xml im Verzeichnis /home/user speichern (da dies der Arbeitspfad ist)
in der Konsole: cd auf /home/user/javaapp/ und dann java -jar ./javaapp.jar würde die Datei im Ordner der .jar speichern, da dies nun der Arbeitspfad ist
und das Beispiel mit user.home ist auch nicht unbedingt schön wenn der Benutzer plötzlich einfach Konfigurationsdateien im home-Verzeichnis liegen hat.

Gibt es eigentlich bestimmte Gründe dass es nicht möglich ist, den Pfad zur .jar herauszubekommen? Ausser dem Arbeitspfad habe ich noch nichts gefunden.

mfg
 

faetzminator

Gesperrter Benutzer
und das Beispiel mit user.home ist auch nicht unbedingt schön wenn der Benutzer plötzlich einfach Konfigurationsdateien im home-Verzeichnis liegen hat.

Öhm, das ist normal. Ich hab ~60 Dateien in [c]~[/c] beginnend mit [c].[/c]. Als Standardbeispiel z.B. [c]~/.bashrc[/c].
Natürlich solltest du die Datei dann [c].<programmname>-config[/c] o.ä. nennen.
 

Wildcard

Top Contributor
Der Java Preference Store schreibt je nach OS an unterschiedliche Stellen. Kann eine Windows Registry sein, eine Datenbank, Dateien, du brauchst dich nicht darum kümmern.
Löschen kannst du die Einträge natürlich auch, dann brauchst du aber eine Art uninstaller.
Das Problem hast du aber mit jeder Art von User spezifischen Settings. Der Uninstaller muss von einem Account mit root/admin rechten ausgeführt werden und du musst theoretisch die Einstellungen aller User löschen wenn du es sauber machen willst.
In der Praxis lässt man User Settings daher auch einfach auf dem System und solange du nur ein paar Settings ablegst fällt das auch gar nicht ins Gewicht.
 
J

JohannisderKaeufer

Gast
Also das naheliegendste ist ja eine Datei im gleichen Ordner der .jar-Datei zu Speichern.

Damit würdest du keine Freude haben.
Die jar gehört an und für sich unter windows in c:programme unter Linux bspw. /opt.

Um Programme zu installieren werden Administrationsrechte bzw. root-Rechte benötigt. Unter Vista hieß das mal UAC.
Und diese Rechte sorgen unter anderem dafür, das man für diese Ordner in der Regel keine Schreibrechte hat.

Wenn du nun in diesen Verzeichnissen, deine Konfigurationen oder Nutzdaten ablegen möchtest, dann wirst du mit den Betriebssysteminternen Sicherheitsmaßnahmen bekanntschaft machen. Unter Windows XP mag das vielleicht noch nicht so auffallen, da man da Standardmäßig eh als Admin unterwegs ist:autsch:, aber ab Vista wirds deutlich.
 

mabuhay

Bekanntes Mitglied
Öhm, das ist normal. Ich hab ~60 Dateien in [c]~[/c] beginnend mit [c].[/c]. Als Standardbeispiel z.B. [c]~/.bashrc[/c].
Natürlich solltest du die Datei dann [c].<programmname>-config[/c] o.ä. nennen.

Ja das ist mir klar. Nur wäre es dann ein wenig kompliziert dass bei Windows und Mac die Dateien am richtigen Ort gespeichert werden (oder gibt es etwas wie user.home welches den Pfad zu C:\Documents and Settings\user\Application Data\ oder so herausgibt? Wäre nützlich wegen unterschiedlicher Systemsprachen.)

Damit würdest du keine Freude haben.
Die jar gehört an und für sich unter windows in c:programme unter Linux bspw. /opt.

Um Programme zu installieren werden Administrationsrechte bzw. root-Rechte benötigt. Unter Vista hieß das mal UAC.
Und diese Rechte sorgen unter anderem dafür, das man für diese Ordner in der Regel keine Schreibrechte hat.

Wenn du nun in diesen Verzeichnissen, deine Konfigurationen oder Nutzdaten ablegen möchtest, dann wirst du mit den Betriebssysteminternen Sicherheitsmaßnahmen bekanntschaft machen. Unter Windows XP mag das vielleicht noch nicht so auffallen, da man da Standardmäßig eh als Admin unterwegs ist:autsch:, aber ab Vista wirds deutlich.

Hmm, ja da hast du recht, da würde es dann Probleme geben.


Vielen Dank für alle Antworten. Ist mir nun einiges klar geworden :)

mfg
 

Wortraum

Bekanntes Mitglied
Nur wäre es dann ein wenig kompliziert dass bei Windows und Mac die Dateien am richtigen Ort gespeichert werden (oder gibt es etwas wie user.home welches den Pfad zu C:\Documents and Settings\user\Application Data\ oder so herausgibt? Wäre nützlich wegen unterschiedlicher Systemsprachen.)
Was ist denn an ~ respektive %HOMEPATH% falsch? Gimp, Jedit oder Netbeans nutzen beispielsweise auch %HOMEPATH% unter Windows.

Wenn Du etwas in %APPDATA% speichern willst, kannst Du den Pfad über die Umgebungsvariable abfragen, etwa so:
Java:
String configPath = System.getenv("APPDATA");
if (configPath == null) {
    configPath = System.getProperty("user.home");
}
 

mabuhay

Bekanntes Mitglied
Was ist denn an ~ respektive %HOMEPATH% falsch? Gimp, Jedit oder Netbeans nutzen beispielsweise auch %HOMEPATH% unter Windows.

Da ist natürlich nichts falsch daran. Habe nur noch nach einer (einheitlichen) Lösung für Windows, Mac und Linux gesucht. Wie würde ich dann für Mac and den Pfad zu den Programmeinstellungen kommen? Sind da die daten auch im home-Verzeichnis gespeichert mit vorangestellem "." (punkt)?
Danke für den Hinweis auf die Umgebungsvariable %APPDATA%. Schade gibt es da keine einheitliche Lösung gibt...

mfg
 

nocxsville

Bekanntes Mitglied
Eine kleine Anmerkung zu Preferences. Unter Windows Vista / 7 gibt es Probleme, wenn die Anwendung nicht als Administrator ausgeführt wird. Bei Setzen einer preference wird eine Exception geworfen. Dazu gibt es bereits einen Fehlereintrag.

Grüße
nocxsville
 

mabuhay

Bekanntes Mitglied
Thx. Machs jetzt aber mit Dateien. Ist mir irgendwie lieber wenn ich weiss wo die Datei liegt, als wenns einfach irgendwo gespeichert wird.

mfg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Einstellungen in JAR speichern Allgemeine Java-Themen 8
I Einstellungen für ein Programm speichern Allgemeine Java-Themen 5
E Nicht Business-Logik Daten also Einstellungen wo speichern? Allgemeine Java-Themen 2
M Passwörter in Einstellungen speichern Allgemeine Java-Themen 2
DEvent In Mehrbenutzersystemen Einstellungen speichern Allgemeine Java-Themen 8
TheJavaKid Einstellungen speichern ohne eine Datei zu erstellen! Allgemeine Java-Themen 19
OnDemand Zugangsdaten externer Systeme sicher speichern Allgemeine Java-Themen 8
Z Passwort Versuche speichern Allgemeine Java-Themen 8
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
8u3631984 Bilder in Datenbank speichern - sinnvoll Allgemeine Java-Themen 5
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
killig Textdatei einlesen und in HashMap speichern (duplikate entfernen) Allgemeine Java-Themen 12
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
N zweidimensionalen Array in dreidimensionalen Array speichern Allgemeine Java-Themen 4
temi Lösung zum Speichern von Deltafiles Allgemeine Java-Themen 6
J Java Filechooser Speichern Allgemeine Java-Themen 8
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
platofan23 Wie .txtDatei im Java Eclipse-Projekt bzw. in der Jar speichern? Allgemeine Java-Themen 7
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
S Swing Speichern nach Button-Klick Allgemeine Java-Themen 5
H ArrayListe in CSV Datei speichern Allgemeine Java-Themen 6
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
T Speichern von Objekten Allgemeine Java-Themen 2
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
D .txt Datei in .jar Datei speichern Allgemeine Java-Themen 3
M Key-File im selben Ordner speichern? Allgemeine Java-Themen 18
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
Aruetiise Funktion(y = mx+n) in String speichern und berechnen Allgemeine Java-Themen 9
S Eindimensionales Array in zweidimensionales Array speichern Allgemeine Java-Themen 5
offi Excel mit Inhalten aus DB öffnen ohne zu speichern Allgemeine Java-Themen 8
MiMa Speichern von Programmeinstellungen in Datei Allgemeine Java-Themen 7
F Best Practice Große Anzahl an Objekten speichern und lesen Allgemeine Java-Themen 19
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
@SupressWarnings() Feste Kosten speichern Allgemeine Java-Themen 4
N ZIp datei direkt im eclipse speichern Allgemeine Java-Themen 4
N Das Ende von bestimmten zeilen in text datei ändern und speichern Allgemeine Java-Themen 3
C Best Practice Speichern kleineren Mengen Stammdaten? Allgemeine Java-Themen 3
X Mehrere booleans in Datei Speichern, Updaten und Laden Allgemeine Java-Themen 1
F Json in sql speichern und lesen Allgemeine Java-Themen 10
F Alte Passörter mit Gson und Json in SQL speichern? Allgemeine Java-Themen 5
K API-Key sicher speichern Allgemeine Java-Themen 2
K Große Mengen an Daten speichern Allgemeine Java-Themen 9
B Zahlen manuell eingeben und in Array Speichern Allgemeine Java-Themen 2
K Input/Output String aus einer Datei einlesen und in anderer Datei speichern Allgemeine Java-Themen 20
Tacofan Bilder in Resource speichern Allgemeine Java-Themen 6
C Objekte in Array List speichern? Allgemeine Java-Themen 1
OnDemand Objekte speichern Allgemeine Java-Themen 8
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
J Text lesen und in Variablen speichern Allgemeine Java-Themen 3
U Variablen Stringarrays mit wenig verschiedenen Zeichen effizienter speichern Allgemeine Java-Themen 10
HarleyDavidson Input/Output Heruntergeladene Datei direkt nach dem Download öffnen ohne zu speichern Allgemeine Java-Themen 1
J Daten persistent speichern Allgemeine Java-Themen 14
S JavaMail - MailSubject,MailFrom,MailDate in String Array speichern NullPointerException Allgemeine Java-Themen 2
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
R HtmlUnit: Canvas als Bild speichern Allgemeine Java-Themen 0
E KeyCode in anderer Klasse speichern Allgemeine Java-Themen 2
M YouTube-Video herunterladen und speichern Allgemeine Java-Themen 10
C Position speichern von verschiebbaren Elementen auf JPanel Allgemeine Java-Themen 3
S Wertepaar in LinkedList/PriorityQueue speichern Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
J Arraylist speichern und laden? Allgemeine Java-Themen 5
S speichern von RSA-Keys Allgemeine Java-Themen 1
3 OOP Instanzen aus einer Klasse persistent speichern. Allgemeine Java-Themen 9
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
G Suchweg durch Binärbaum speichern Allgemeine Java-Themen 4
D IP-Cam live stream speichern Allgemeine Java-Themen 9
javampir Lange Bitfolge speichern Allgemeine Java-Themen 3
M Methoden in Rescources speichern Allgemeine Java-Themen 4
L iText PDF-Generierung ohne Speichern Allgemeine Java-Themen 10
U Screenshot erstellen und speichern Allgemeine Java-Themen 6
OnDemand Input/Output Variablen in Datei Speichern um sie wieder auszulesen Allgemeine Java-Themen 4
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
S XML lesen, verarbeiten, speichern klappt in Eclipse, aber nicht in der JAR Allgemeine Java-Themen 4
H JPA (EclipseLink) Neuer Eintrag in Collection speichern (unidirektional) Allgemeine Java-Themen 3
J RC4 Key als String speichern? Allgemeine Java-Themen 5
F Java Api Bilder speichern Allgemeine Java-Themen 3
T UTF-16LE String aus LDAP lesen und als ISO-8859-1 in DB speichern? Allgemeine Java-Themen 2
F Problem beim Speichern eines Attachments Allgemeine Java-Themen 3
K Input/Output Daten speichern / laden Allgemeine Java-Themen 2
M Best Practice: Daten aufnehmen-speichern-bereitstellen Allgemeine Java-Themen 8
D Variablen zur Laufzeit global speichern (Registry Pattern?) Allgemeine Java-Themen 6
B Effizienteres Speichern von Worten Allgemeine Java-Themen 4
Z Design um boolsche ausdrücke zu speichern & auszuwerten Allgemeine Java-Themen 3
M Instanzierte Objekte in XML Dokument speichern Allgemeine Java-Themen 3
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
M Aus Excel Tabelle lesen und Werte in Array speichern Allgemeine Java-Themen 15
H Eclipse x Stellen einer Zahl in array speichern Allgemeine Java-Themen 3
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3
DStrohma Passwort in Datei speichern - wie? Allgemeine Java-Themen 31
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben