Preferences

cyb0rg

Aktives Mitglied
Hallo Zusammen,
ich versuche gerade mit mit Preferences ausseinander zu setzen und bin da noch nicht erfolgreich.
ich versuche als bsp mit folgendem Code Preferences zu speichern:
Code:
public class Main {

    public static void main(String[] args) {
   // write your code here
        Preferences pre = Preferences.userNodeForPackage(Main.class);
        pre.put("test", "val");
    }
}

so wie ich das verstehe müsste dohc nun im User verzeichnis ein pref liegen... ich finde aber niergends etwas was mit dem zu tun hätte..
Ich nutze hier ein MacOS Sierra.

hat einer eine idee?

gruss
 

Tobse

Top Contributor
Wie @Joose schon sagte: flush() musst du aufrufen, um die Daten zu speichern.

Die Daten selber liegen unter Windows in der Registry und unter Linux im Home-Verzeichnis (userNodeForPackage() benutzt userRoot())
 

cyb0rg

Aktives Mitglied
Versuch doch mal "flush()" aufzurufen.
leider ohne erfolg :(
gibt allerdings auch keine exception
nach java docs beschriebung, scheint es das schreiben zu "erzwingen":
Code:
public void flush()
          throws IOException
Flushes this output stream and forces any buffered output bytes to be written out. The general contract of flush is that calling it is an indication that, if any bytes previously written have been buffered by the implementation of the output stream, such bytes should immediately be written to their intended destination.
If the intended destination of this stream is an abstraction provided by the underlying operating system, for example a file, then flushing the stream guarantees only that bytes previously written to the stream are passed to the operating system for writing; it does not guarantee that they are actually written to a physical device such as a disk drive.

The flush method of OutputStream does nothing.

Specified by:
flush in interface Flushable
Throws:
IOException - if an I/O error occurs.

@cyb0rg Du kannst deinen Code testen, indem du den String mit get abfragst und auf der Konsole ausgibst.
Aber ich nehme an deine Frage lautet: Wo auf dem Computer liegt dann die Datei mit dem per put angelegten String?
Da kann ich dir leider auch nicht helfen.
Jupp, das problem ist, wenn ich Gette... im gleichen lauf, dann bekomme ich den erwünschten output, jedoch sobald ich es NEU starte, kommt falls ich vorher gette ein NULL Pointer weil er nichts findet..
Deswegen wollte ich erstmal herausfinden ob dieses wirklich geschrieben, wird.. dafür muss ich aber auch wissen wohin es geschrieben werden müsste :)
Wie @Joose schon sagte: flush() musst du aufrufen, um die Daten zu speichern.

Die Daten selber liegen unter Windows in der Registry und unter Linux im Home-Verzeichnis (userNodeForPackage() benutzt userRoot())
Was ich machen könnte ist das ganze kurz auf Linux zu testen, aber brauchen tu ich es letztenendes doch auf mac im moment.
 

Tobse

Top Contributor
Sag mal, welchen Jaadoc hast du denn gelesen? Du benutzt die Klasse Preferences, also lies doch auch den Javadoc dazu, und nicht den von OutputStream..... ://

Javadoc zu Preferences#flush() hat gesagt.:
[...]
Forces any changes in the contents of this preference node and its descendants to the persistent store. Once this method returns successfully, it is safe to assume that all changes made in the subtree rooted at this node prior to the method invocation have become permanent.
[...]

Was ich machen könnte ist das ganze kurz auf Linux zu testen, aber brauchen tu ich es letztenendes doch auf mac im moment.
Du weisst, dass Mac eine Linux-Variante ist, oder? Auch unter Mac liegt das zeug in deinem Home-Verzeichnis $/.java/
 

cyb0rg

Aktives Mitglied
Sag mal, welchen Jaadoc hast du denn gelesen? Du benutzt die Klasse Preferences, also lies doch auch den Javadoc dazu, und nicht den von OutputStream..... ://
eeeeh mja ^^ hast recht.... my fault.
Du weisst, dass Mac eine Linux-Variante ist, oder? Auch unter Mac liegt das zeug in deinem Home-Verzeichnis $/.java/
Mac stammt ursprünglich von Unix (Wovon auch Linux ursprünglich stammt) aber ja einiges ist sehr ähnlich :)
in diesem verzeichnis mehr oder weniger hätte ich es auch erwartet... aber leider auch mit find / -name "prefs" und anderen möglichen kombinationen wurde ich bisher niergends fündig... alles was mir bisher einfiel habe ich durchsucht leider ohne erfolg :(
 

JStein52

Top Contributor
Ich habe mal das da gefunden:
Unix und Mac OS X speichern die Einstellungen in XML-Dateien. Die Systemeigenschaften landen bei Unix unter /etc/.java/.systemPrefs und die Benutzereigenschaften lokal unter $HOME/.java/.userPrefs. Mac OS X speichert Benutzereinstellungen im Verzeichnis /Library/Preferences/.
 

JStein52

Top Contributor
Und ich habe das jetzt gerade auf einem Mac probiert:
Code:
public class Main {

    public static void main(String[] args) throws Exception {
   // write your code here
        Preferences pre = Preferences.userNodeForPackage(Main.class);
        System.out.println("Pref: "+pre.get("test", "mischt"));
        pre.put("test", "val");
        pre.flush();
    }
}
ergit als Ausgabe wie erwartet beim allerersten Programmlauf
Pref: mischt
und bei allen folgenden
Pref: val

Wo er das speichert habe ich aber auch nicht gefunden :):)
 

Java20134

Bekanntes Mitglied
Wenn die main Methode startest, bekommst du eine Fehlermeldung? Wenn ja, dann wird durch diese ausgesagt, dass die Preferences nicht gefunden/erstellt wurden. Das liegt daran, dass du noch eine Windows Variable erstellen musst!
 

krgewb

Top Contributor
Java:
System.out.println("Pref: "+pre.get("test", "mischt"));
Mit dieser Zeile gibt JStein52 einen Default-Wert vor. Falls es test noch nicht gibt dann soll "mischt" ausgegeben werden. Falls es test jedoch gibt dann wird der hinterlegte String ausgegeben.
 

cyb0rg

Aktives Mitglied
Dann weiss ich auch nicht weiter - so steht es in den Javadocs.
nach ein paar stunden weiterprobieren,.. bin ich auch nicht wirklich weiter gekommen :(
hast du in .java geguckt ? Oder nur mit find gesucht ...
leider.. gibt es kein .java... :( das einzige was ich gefunden habe:

com.apple.java.util.prefs.plist
com.apple.ncprefs.plist
com.apple.speech.recognition.AppleSpeechRecognition.prefs.plist
com.apple.speech.voice.prefs.plist

Ich habe mal das da gefunden:
Unix und Mac OS X speichern die Einstellungen in XML-Dateien. Die Systemeigenschaften landen bei Unix unter /etc/.java/.systemPrefs und die Benutzereigenschaften lokal unter $HOME/.java/.userPrefs. Mac OS X speichert Benutzereinstellungen im Verzeichnis /Library/Preferences/.
jupp... also ich hab das ganze mal auf einem debian & ubuntu getestet... da hat es einen .java verzeichnis im home verzeichnis erstellt und alles wie erwartet.
Und ich habe das jetzt gerade auf einem Mac probiert:
Code:
public class Main {

    public static void main(String[] args) throws Exception {
   // write your code here
        Preferences pre = Preferences.userNodeForPackage(Main.class);
        System.out.println("Pref: "+pre.get("test", "mischt"));
        pre.put("test", "val");
        pre.flush();
    }
}
ergit als Ausgabe wie erwartet beim allerersten Programmlauf
Pref: mischt
und bei allen folgenden
Pref: val

Wo er das speichert habe ich aber auch nicht gefunden :):)
bei mir wurden auch die prefs geladen.. aber wie du habe ich kein file oder sonst was gefunden :(
 

Anhänge

  • 2017-04-08_22-50-26.png
    2017-04-08_22-50-26.png
    36,2 KB · Aufrufe: 27

Tobse

Top Contributor
Um das hier mal abzukürzen:

Für einen realen Anwendungsfall wäre es mMn. sträflich, Applikationsspezifische Einstellungen in Globalen Dateien (wie der Registry oder den benanten Dateien) abzulegen. Ich benutze die Standard-Preferences in meinen Anwendungen deshalb nicht.
Stattdessen macht es IMHO deutlich mehr Sinn, die Preferences in eine Applikations-Spezifische Datei zu schreiben. Da weiss man, wo sie liegt, und andere Software spuckt einem nicht in die Suppe. Ich habe mir dafür eine simple XML-Implementierung geschrieben:
https://github.com/tmarsteel/xmlprefs

Das würde ich dir auch empfehlen. Nimm eine Implementierung der Preferences, bei der du den Speicherort bestimmen kannst. Gibts unzählige im Netz.
 

cyb0rg

Aktives Mitglied
Um das hier mal abzukürzen:

Für einen realen Anwendungsfall wäre es mMn. sträflich, Applikationsspezifische Einstellungen in Globalen Dateien (wie der Registry oder den benanten Dateien) abzulegen. Ich benutze die Standard-Preferences in meinen Anwendungen deshalb nicht.
Stattdessen macht es IMHO deutlich mehr Sinn, die Preferences in eine Applikations-Spezifische Datei zu schreiben. Da weiss man, wo sie liegt, und andere Software spuckt einem nicht in die Suppe. Ich habe mir dafür eine simple XML-Implementierung geschrieben:
https://github.com/tmarsteel/xmlprefs

Das würde ich dir auch empfehlen. Nimm eine Implementierung der Preferences, bei der du den Speicherort bestimmen kannst. Gibts unzählige im Netz.
und ich wollte eigentlich mal etwas nehmen was bereits geliefert wird vom SDK :) naja werde wohl nicht drum herum kommen eine andere implementierung zu nehmen.
 

Thallius

Top Contributor
Warum ? Gibt es da eine Begründung ...

Warum muss man das eigentlich wissen ?

Alleine schon weil ich es zum kotzen finden wenn Programme nur über einen Deinstaller zu entfernen sind. Das mögen Windows User für normal halten weil sie es einfach nicht besser kennen aber beim Mac ziehst du einfach das eine .app File in den Papierkorb und alle zum programmgehörigen Files werden gelöscht. Ausnahmen bilden hier nur Programme die explizit Daten abspeichern die auch nach dem löschen des Programmes noch interessant sein können. Diese können aber nur gespeichert werden wenn der User vorher danach gefragt wird wo diese Daten gespeichert werden sollen und er von daher selber entscheiden kann was und wo hinkommt.


Dieses unsägliche in die registry schreiben ist der größte Kropf von Windows überhaupt und wer sich das damals ausgedacht hat gehört erschlagen...

Claus
 

JStein52

Top Contributor
beim Mac ziehst du einfach das eine .app File in den Papierkorb und alle zum programmgehörigen Files werden gelöscht.
Das mögen Mac-User für normal halten weil sie es nicht anders kennen :):) Wenn du auf dem Mac mal in die .-Directories in deinem $HOME schaust wird da auch genug angelegt was beim "Deinstallieren" nie entfernt wird. Was ist da gut dran. Ich finde ein Installer/Deinstaller gehört zu einer Applikation dazu und dass das beim Mac nicht so ist (jedenfalls beim Deinstall) halte ich eher für eine Schwäche als für ein Feature
 

mrBrown

Super-Moderator
Mitarbeiter
Das mögen Mac-User für normal halten weil sie es nicht anders kennen :):) Wenn du auf dem Mac mal in die .-Directories in deinem $HOME schaust wird da auch genug angelegt was beim "Deinstallieren" nie entfernt wird. Was ist da gut dran. Ich finde ein Installer/Deinstaller gehört zu einer Applikation dazu und dass das beim Mac nicht so ist (jedenfalls beim Deinstall) halte ich eher für eine Schwäche als für ein Feature
Genug Deinstaller unter Windows lassen auch allerhand da...

Außerdem will ich doch oftmals gar nicht, das die paar Byte an Einstellungen einfach so gelöscht werden, müsste ich ja beim nächsten mal alles neu einstellen...
 

Meniskusschaden

Top Contributor
Dieses unsägliche in die registry schreiben ist der größte Kropf von Windows überhaupt und wer sich das damals ausgedacht hat gehört erschlagen...
Insgesamt gefällt es mir auch besser, wenn die Einstellungen in Konfigurationsdateien liegen. Trotzdem sehe ich auch Vorteile in einer zentralen Registry. Die Einstellungen können dann vom Administrator mit Bordmitteln über Gruppenrichtlinien für die gesamte Domäne verwaltet werden, ohne dass der Programierer etwas dafür vorbereiten muß.
 

JStein52

Top Contributor
Genug Deinstaller unter Windows lassen auch allerhand da...
Dann ist der Deinstaller schlecht gemacht.
Ich habe ja auch einen Mac da stehen, aber versuche da mal rauszufinden welche Software in welcher Version installiert ist ? Oder bin ich nur zu doof dazu ? Bisher habe ich mich nie darum gekümmert aber durch das Thema habe ich mal nachgeschaut was ich denn alles so für unbekannte Dateien bei mir rumstehen habe .... Gruselig, und mich hat nie ein Programm danach gefragt welche Einstellungen es wohin speichern soll. Und da ich nicht weiss welche Datei wozu gehört werde ich auch die Finger davon lassen ---> der Leichenberg wächst immer nur. Und man kann diese ganzen unbekannten Dateien auch als eine Art Registry ansehen, aber wild verteilt und ausser Kontrolle.
 

mrBrown

Super-Moderator
Mitarbeiter
Ich habe ja auch einen Mac da stehen, aber versuche da mal rauszufinden welche Software in welcher Version installiert ist ? Oder bin ich nur zu doof dazu ?
Rechtsklick aufs Programm -> Information.
Oder wenns läuft: Im Menü auf "Über ...".
So schwer ist das jetzt auch nicht...
Bisher habe ich mich nie darum gekümmert aber durch das Thema habe ich mal nachgeschaut was ich denn alles so für unbekannte Dateien bei mir rumstehen habe .... Gruselig, und mich hat nie ein Programm danach gefragt welche Einstellungen es wohin speichern soll. Und da ich nicht weiss welche Datei wozu gehört werde ich auch die Finger davon lassen ---> der Leichenberg wächst immer nur. Und man kann diese ganzen unbekannten Dateien auch als eine Art Registry ansehen, aber wild verteilt und ausser Kontrolle.
Unter Windows ist das nicht anders, nur liegen sie da sowohl in den Verzeichnissen (wie bei Unixoiden) als AUCH in der Registry, da gibts also noch mehr Raum für Leichen ;)

Dateien von denen ich nicht weis woher sie sind, sind auch recht selten...
 

JStein52

Top Contributor
Unter Windows ist das nicht anders, nur liegen sie da sowohl in den Verzeichnissen (wie bei Unixoiden) als AUCH in der Registry, da gibts also noch mehr Raum für Leichen
Ja genau, aber nur weil es dann Leute wie @cyb0rg gibt die dann sagen ich mach was eigenes und lege meine Dateien dort ab wo ich will. Genau das soll ja mit >Preferences vermieden werden.
Rechtsklick aufs Programm -> Information.
Ja wenn ich schon weiss was ich suche dann ja. Aber wie kriege ich die Liste der installierten Software. Algemein gesagt: Softwaremanagement auf dem Mac halte ich für eine Katastrophe .... Microsoft bemüht sich wenigstens darum und bietet die Mittel an. Wenn sie keiner nutzt ..... Es ist ja auch nie die Badehose schuld wenn man ertrinkt
 

mrBrown

Super-Moderator
Mitarbeiter
Ja genau, aber nur weil es dann Leute wie @cyb0rg gibt die dann sagen ich mach was eigenes und lege meine Dateien dort ab wo ich will. Genau das soll ja mit >Preferences vermieden werden.

Oder auch einfach, weil nicht alles rein passt und Config-Datein manchmal auch einfach leichter sind?

Ja wenn ich schon weiss was ich suche dann ja. Aber wie kriege ich die Liste der installierten Software. Algemein gesagt: Softwaremanagement auf dem Mac halte ich für eine Katastrophe .... Microsoft bemüht sich wenigstens darum und bietet die Mittel an. Wenn sie keiner nutzt ..... Es ist ja auch nie die Badehose schuld wenn man ertrinkt
Einfach ein ls /Applications oder den Paketmanager deiner Wahl fragen?
Ist ja wieder unter Windows nicht anders...
 

JStein52

Top Contributor
Ist ja wieder unter Windows nicht anders...
Doch klar ist es da anders. Da habe ich keinen Paketmanager meiner Wahl sondern die Systemsteuerung. Da weiss ich also genau wo ich hinlangen muss.

Oder auch einfach, weil nicht alles rein passt und Config-Datein manchmal auch einfach leichter sind?
Wieder die Frage: warum ? Was passt wo nicht rein ?

Rechtsklick aufs Programm -> Information.
Ich lerne ja gerne dazu und versuche die Version meines Teamviewers auf dem Mac rauszufinden. Da geht nix mit Rechtsklick. Beim Rechtsklick kommt Optionen, Ausblenden, beenden ... nix mit Info. Und wenn der Teamviewer nicht selber den Info-Button drin hätte (aber erst nachdem ich ihn starte !!) dann gibts da gar nix
 

JStein52

Top Contributor
Wir sind aber ein bisschen vom Thema abgekommen. Ich habe ja nur widersprochen immer reflexartig die Empfehlung zu geben "mach lieber was eigenes". Genau das halte ich für den Grund allen Übels, nicht den Mac ;);)
 

mrBrown

Super-Moderator
Mitarbeiter
Doch klar ist es da anders. Da habe ich keinen Paketmanager meiner Wahl sondern die Systemsteuerung. Da weiss ich also genau wo ich hinlangen muss.
In der eben nicht alles landet. Also muss man zusätzlich per Hand suchen.
Davon ab ersetzt die wohl kaum einen Paketmanager und kann zB Abhängigkeiten auflösen etc...

Wieder die Frage: warum ? Was passt wo nicht rein ?
Einfaches Beispiel: nachgeladene Bilder, passen eher nicht in die Registry, also doch wieder eigenes Verzeichnis
Die Config-Datei kann ich einfach bearbeiten, kopieren, auf nem anderem Rechner benutzen. Mit der Registry ist das so eher nicht möglich.
Ich lerne ja gerne dazu und versuche die Version meines Teamviewers auf dem Mac rauszufinden. Da geht nix mit Rechtsklick. Beim Rechtsklick kommt Optionen, Ausblenden, beenden ... nix mit Info. Und wenn der Teamviewer nicht selber den Info-Button drin hätte (aber erst nachdem ich ihn starte !!) dann gibts da gar nix
Musst auch die .app nehmen, nicht irgendeinen Alias.
 

JStein52

Top Contributor
In der eben nicht alles landet. Also muss man zusätzlich per Hand suchen.
Badehosenprinzip. Würde der Installer es sauber eintragen .....
Einfaches Beispiel: nachgeladene Bilder, passen eher nicht in die Registry, also doch wieder eigenes Verzeichnis
Das sind aber auch keine Preferences ..... Und kein Mensch würde die in einer config-Datei speichern.
Die Config-Datei kann ich einfach bearbeiten, kopieren, auf nem anderem Rechner benutzen. Mit der Registry ist das so eher nicht möglich.
Doch klar. Aber ob das so erwünscht ist .... und überhaupt notwendig ? Wohl gemerkt, wir reden nicht von irgendwelchen Applikationsdaten sondern von Preferences
 

mrBrown

Super-Moderator
Mitarbeiter
Badehosenprinzip. Würde der Installer es sauber eintragen .....
Tun sie halt nicht. Und wenn es alle richtig machen, dann sollte man davon ausgehen dass es unter Unixoiden auch alle richtig machen, oder?

Dann hat man kryptische Registry für einiges + Dateisystem für anderes bei Windows gegen offenes Dateisystem für alles bei Unix. Da gefällt mir der offene Weg doch besser...

Und was ist unter Windows eigentlich mit Programmen, die man gar nicht installieren will und kann? So eine typische jar zum Beispiel?
Unter Unix funktioniert die wie jedes Programm, unter Windows darf man die dann nicht mehr benutzen, weil kein installer benutzt wird?

Das sind aber auch keine Preferences ..... Und kein Mensch würde die in einer config-Datei speichern.

Trotzdem werden sie gespeichert, bei Unixoiden an genaue einer Stelle zusammen mit allen anderen Daten, bei Windows wild verteilt ;)

Doch klar. Aber ob das so erwünscht ist .... und überhaupt notwendig ? Wohl gemerkt, wir reden nicht von irgendwelchen Applikationsdaten sondern von Preferences
Ja ist's, meine Configs kann ich wie ich will zwischen allen Unixoiden hin und her schieben und tue das auch. Ich will ja nicht jedes Mal alles neu einrichten wenn ich nen neuen Rechner nutze...
 

JStein52

Top Contributor
Ich will ja nicht jedes Mal alles neu einrichten wenn ich nen neuen Rechner nutze...
Wenn du willst kann ich dir die Preferences aus dem Beispiel des TE schicken, die kannst du dann per Doppelklick auf deinem Rechner einspielen.
bei Windows wild verteilt
Unsinn. gerade da nicht wild verteilt. Da hast du sie mit einem einzigen Suchbefehl im regedit gefunden und z.B. exportiert.
Und was ist unter Windows eigentlich mit Programmen, die man gar nicht installieren will und kann? So eine typische jar zum Beispiel?
Das fällt jetzt wieder unter das Thema Softwaremanagement und ist auf Windows und Unix/Mac gleich. Wenn du auf dem Mac kein Package draus machst und auf Windows kein Setup sind die da völlig gleichwertig zu sehen (als Trash den man mal zum rumspielen da liegen hat)
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn du willst kann ich dir die Preferences aus dem Beispiel des TE schicken, die kannst du dann per Doppelklick auf deinem Rechner einspielen.
Wenn ich ein Windows hätte...Wäre es eine Datei könnte ich die unter so ziemlich jedem OS nutzen...

Unsinn. gerade da nicht wild verteilt. Da hast du sie mit einem einzigen Suchbefehl im regedit gefunden und z.B. exportiert.
Aber eben nur das, was in der Regex liegt, wo eher nicht alles liegt...
Alles andere liegt ja wild verteilt irgendwo

Das fällt jetzt wieder unter das Thema Softwaremanagement und ist auf Windows und Unix/Mac gleich. Wenn du auf dem Mac kein Package draus machst und auf Windows kein Setup sind die da völlig gleichwertig zu sehen (als Trash den man mal zum rumspielen da liegen hat)
So ziemlich jedes der Programme die ich hier hab musste man nur in die Applications kopieren, nichts mit Setup. Da sind durchaus auch jars bei, die sind alles andere als Trash...
Hier gibts keinen Unterscheid zwischen 'ner jar die ich im Downloads-Ordner aus den grad geladenen Source-Datein kompiliere starte und irgendeinem anderem Programm
 

JStein52

Top Contributor
Aber eben nur das, was in der Regex liegt, wo eher nicht alles liegt...
Alles andere liegt ja wild verteilt irgendwo
Wir drehen uns irgendwie im Kreis. Ich werte das alles mal als persönliche Vorlieben. Besser wäre halt wenn es eine Vorgabe gäbe die man einfach einhalten muss und aus die Maus.
Und zu den jar's die mal so eben rumkopierst .... Ich glaube du redest hier von deinem Entwicklerrechner den du ja gerne nach Belieben vollmüllen darfst. Aber ernsthafte Software die du an Kunden auslieferst wirst du kaum mal eben so rumkopieren. Wir machen Software die aus Windows-Komponenten für ca. 8000 Benutzer in ganz Deutschland besteht und aus Serverkomponenten die auf Solaris und Linux-Rechnern in 15 Rechenzentren in den einzelnen Bundesländern installiert wird. Ein Abnahmetest besteht darin die ganzen Pakete auf leeren Rechnern (Windows + Unix) zu intallieren, einen Tag Testbetrieb zu machen und zu deinstallieren. Wenn dann auch nur eine Datei übrig ist haben wir eine Fehlermeldung am Hals. (gilt übrigens auch für Registry-Einträgen auf den PC's) . Da lernst du saubere Software und Installer/Deinstaller zu machen. Und selbst wenn wir für den Betrieb mal nur eine jar-Datei korrigieren wird die per Setup Installiert denn es gilt u.a. Versionsangaben in der Registry zu aktualisieren.
 

Tobse

Top Contributor
JStein52 hat gesagt.:
Besser wäre halt wenn es eine Vorgabe gäbe die man einfach einhalten muss und aus die Maus.
Ja viel Spaß damit, wenn diese Lösung mal nicht passt. Oder viel Spaß mit der 50-fach Overengineerten Lösung, die für alles passen muss. Beides BS. Ich sagte auch nicht "mach was eigenes" sondern "lege die Daten dort ab, wo du Kontrolle darüber hast".

JStein52 hat gesagt.:
Warum muss man das eigentlich wissen ?
Na, dreimal darfst du Raten. Noch nicht drauf gekommen? Was ist denn, wenn du mal in die gespeicherten Daten schauen MUSST? Sagst du dann deinem Kunden "Tschuldigung, ich hab das zwar entwickelt, aber wo jetzt ihre Daten sind, weiss ich leider auch nicht.". Bei ein paar simplen Einstellungen kann eine manuelle Neukonfiguration ja noch okey sein. Aber sobald es komplexer wird, ist das keine Option mehr. Und spätestens dann musst du deinen Nutzern wenigstens einen Import/Export der Daten zur Verfügung stellen. Und siehe da: jeder macht sein eigenes Ding. Nix erreicht. Also warum dann nicht gleich einfacher?

Die Software, an der ich täglich arbeite, hat c.a. 1000 Konfigurationswerte. Auf dem Server, auf dem sie läuft, stehen die in .properties Dateien. Es ist genau dokumentiert wo diese Einstellungen zu finden und zu ändern sind. Das ist 100 mal einfacher als für jede dumme Linux-Distro, auf der das Teil läuft, neu zu recherchieren wo Java seine Preferences hinpackt. Einen Import/Export der Settings brauchen wir nicht - man kopiert einfach die .properties Dateien.
 

JStein52

Top Contributor
Und spätestens dann musst du deinen Nutzern wenigstens einen Import/Export der Daten zur Verfügung stellen.
Quatsch. Meine Benutzer können unsere Anwendung benutzen und das war es auch schon. An Preferences soll man gar nichts rumfummeln können. Also ist es so was von wurscht wo die liegen....

Edit: Aber ich glaube ihr seht das alles aus eurer Entwicklersicht. Da mag das ja hinkommen.
 

Tobse

Top Contributor
Quatsch. Meine Benutzer können unsere Anwendung benutzen und das war es auch schon.
Ernsthaft? Entwicklersicht? Ich weiss ja nicht, in welcher Welt du lebst. Die Anwendungen, die ich regelmäßig benutze haben viele, viele Einstellungsmöglichkeiten. Die sind alle per GUI erreichbar. Aber wenn ich meinen PC neu installiere möchte ich nicht 10 Stunden damit zubringen, diese Einstellungen neu vorzunehmen. Ganz abgesehen von dem Aufwand, den ich treiben muss, um mir die ganzen Werte zu merken oder zu speichern. Da keine import/export Funktion zu haben werte ich als miese Usability. Soviel zum Thema Entwicklersicht...

Und dafür gibts ja die Properties-Klasse.
Und dann gibt es Einstellungen, für welche Properties zu simpel gehalten ist. Was macht man da? Man baut sich nichts eigenes sondern nimmt die Preferences. Aber bitteschön so, dass ich nicht die Kontrolle verliere.
 

JStein52

Top Contributor
Ernsthaft? Entwicklersicht? Ich weiss ja nicht, in welcher Welt du lebst. Die Anwendungen, die ich regelmäßig benutze haben viele, viele Einstellungsmöglichkeiten.
Ja, bleibe ich dabei. Du schreibst ja selber die Anwendungen die ich benutze. Und wenn die wirklich so viele Einstellungsmöglichkeiten haben und man die auch noch eintragen muss werte ich das als Design-Fehler in dieser Anwendung. Vielleicht bin ich aber auch voreingenommen durch die Welt unserer Anwender ... und die ist Windows. Jedenfalls der Teil den sie sehen. Wir haben auch mal so angefangen wie du dass alles in irgendwelchen Dateien rumlag und nach 10 Change requests unserer Rechenzentren und vielen Fehlermeldungen zu dem Thema musste das alles in die Registry. Für unsere Rechenzentrumsbetreuer ist das die zentrale Stelle und die Anwender fummeln da absolut nichts dran rum. Jetzt kannst du höchstens fragen in welcher Welt die Rechenzentrumsleute leben ... Aber ich halte die da für professioneller als mich und denke dass sie den Betrieb gut im Griff haben.
 

Tobse

Top Contributor
Fürs Rechenzentrum gibts bei uns Images oder Docker-Container. Kein Spielraum für Fehler von den Leuten, die die Server betreiben; man kann alles vorher testen.
10 neue Server fürs System? Kein Problem, passiert automatisiert. Die ITler im Rechenzentrum müssen nur dafür sorgen, dass die Hardware läuft, ein kompatibles OS läuft und der Netzzugang funktioniert.

Viele Einstellungen => Deisgnfehler? Da bin ich absolut anderer Meinung. Diese Anwendungen haben viele Einstellungen, die alle ihren Sinn und Zweck haben und ich möchte keine davon missen:
  • IntelliJ IDEA (IDEs im allgemeinen)
  • SONAR X3 (DAW)
  • sämtliche meiner Spiele, speziell CS:GO, aber auch dinge wie TESO. Das sind dann Einstellungen wie
    • Tastaturbelegung (c.a. 30 Werte pro Anwendung)
    • Dinge wie Mausempfindlichkeit, Farben, Grafikeinstellungen, ...
Diese Einstellungen händisch vorzunehmen dauert Ewigkeiten; zumindest habe ich das letzte mal viel zu lange dafür gebraucht.

Diese Anwendungen haben entweder eine import/export Funktion für die Einstellungen oder speichern diese Textbasiert an bekannten Orten. Dadurch kann ich die Einstellungen in meinem Cloud-Speicher halten und beim neu-installieren muss ich 10-15 Datein Copy&Pasten anstatt hunderte Regler, Checkboxen und Eingabefelder mit riesigen Fehlerpotential neu anzufassen.
 

JStein52

Top Contributor
Fürs Rechenzentrum gibts bei uns Images oder Docker-Container. Kein Spielraum für Fehler von den Leuten, die die Server betreiben; man kann alles vorher testen.
Schon wieder schreibst du "bei uns" also Entwicklersicht. Ich denke mal unsere Rechenzentren werden ihre Benutzer auch nicht einzeln und per Hand installieren. Wäre bei 8000 PC's auch ein bisschen mühsam. Und du vergisst immer dass es in der Registry sehr wohl eine Export/Import - Funktion gibt mit der du mit einem Mausklick einen ganzen Knoten mit beliebig vielen Einträgen exportieren kannst. Aber ok, ist bei uns reine Windows-Welt Und der Benutzerlevel ist "Putzfrau", da brauchst du nicht damit zu kommen dass er doch in dieser und jener Datei mal was eintragen soll. Was aber nichts daran ändert dass sich bei der Benutzung der Anwendungen laufend Preferences ändern ... und irgendwo gespeichert weren müssen. Und zwar nicht nur dadurch dass der Benutzer irgendwo auf "Einstellungen speichern" klickert ....
 

Tobse

Top Contributor
Na mit "bei uns" meine ich die Software und die Nutzer, mit denen ich und meine Kollegen zu tun haben.

Ich denke es läuft wohl darauf hinaus, dass es kein Allheilmittel für dieses Problem gibt. Muss man wohl per Software neu entscheiden, unter Einbezug der Betriebsumgebung, der Ansprüche der Endanwender und dem Umfang der Einstellungsmöglichkeiten.
 

JStein52

Top Contributor
Ja, ganz genau. Und ich denke alle Möglichkeiten (in Java z.B. Preferences, Properties und was es noch so gibt) haben ihre Daseinsberechtigung und ihre typischen Anwendungsfälle.
 

cyb0rg

Aktives Mitglied
Code:
public class Main {

    public static void main(String[] args) {

        Properties prop = new Properties();
        try {
            OutputStream output = new FileOutputStream("First.Properties.Try");
            prop.setProperty("ersterKey", "FirstValue");
            prop.setProperty("SecondKey", "SecondValue");

            prop.store(output, null);

        } catch (IOException e){
            e.printStackTrace();
        }

    }
}

So, inzwischen habe ich eine für mich praktikable und funktionierende Lösung :)
werde einen default wert definieren wo das ganze abgespeichert werdenn soll (beim home user verzeichnis...) aber dennoch über GUI einen anderen pfad zulassen.

danke für eure hilfe!
 
X

Xyz1

Gast
Was ist hier denn eine Diskussion ausgebrochen...... Wenn es keine Konvention dafür gibt, dann ist eben Gesunder Menschenverstand gefragt. :)
----
Frage des TEs hat sich ja schon erledigt.
----
BTW.: Man sollte auf jedem OS entwickeln/umgehen können.
 

Ähnliche Java Themen

Neue Themen


Oben