In jar Resources schreiben?

hk

Bekanntes Mitglied
In einem Beitrag von "stackoverflow" entnehme ich das in eine Resourcen-Datei nicht geschrieben werde kann. Stimmt das, dann müsste ich die zu ändernde Datei ja außerhalb der "src" ansiedeln und diese beim verteilen immer mitnehmen.
lg heinz
 
Ja, Resourcen innerhalb der Jar kann man nicht verändern.

Was willst du denn erreichen, Benutzereinstellungen oä speichern?
 
Du kannst die Default-Einstellungen ohne weiteres in dem JAR-File ablegen. Einstellungen die der Nutzer dann ändert, kannst du z.B.: mit der
Preferences API https://docs.oracle.com/javase/8/docs/technotes/guides/preferences/overview.html speichern.
Java:
    // This will define a node in which the preferences can be stored
    prefs = Preferences.userRoot().node(this.getClass().getName());
    String ID1 = "Test1";
    String ID2 = "Test2";
    String ID3 = "Test3";

    // First we will get the values
    // Define a boolean value
    System.out.println(prefs.getBoolean(ID1, true));
    // Define a string with default "Hello World
    System.out.println(prefs.get(ID2, "Hello World"));
    // Define a integer with default 50
    System.out.println(prefs.getInt(ID3, 50));

    // now set the values
    prefs.putBoolean(ID1, false);
    prefs.put(ID2, "Hello Europa");
    prefs.putInt(ID3, 45);

    // Delete the preference settings for the first value
    prefs.remove(ID1);
 
Zuletzt bearbeitet:
Du kannst die Default-Einstellungen ohne weiteres in dem JAR-File ablegen. Einstellungen die der Nutzer dann ändert, kannst du z.B.: mit der
Preferences API https://docs.oracle.com/javase/8/docs/technotes/guides/preferences/overview.html speichern.
Java:
    // This will define a node in which the preferences can be stored
    prefs = Preferences.userRoot().node(this.getClass().getName());
    String ID1 = "Test1";
    String ID2 = "Test2";
    String ID3 = "Test3";

    // First we will get the values
    // Define a boolean value
    System.out.println(prefs.getBoolean(ID1, true));
    // Define a string with default "Hello World
    System.out.println(prefs.get(ID2, "Hello World"));
    // Define a integer with default 50
    System.out.println(prefs.getInt(ID3, 50));

    // now set the values
    prefs.putBoolean(ID1, false);
    prefs.put(ID2, "Hello Europa");
    prefs.putInt(ID3, 45);

    // Delete the preference settings for the first value
    prefs.remove(ID1);
Danke, das werde ich mal versuchen.
 
Du kannst die Default-Einstellungen ohne weiteres in dem JAR-File ablegen. Einstellungen die der Nutzer dann ändert, kannst du z.B.: mit der
Preferences API https://docs.oracle.com/javase/8/docs/technotes/guides/preferences/overview.html speichern.
Java:
    // This will define a node in which the preferences can be stored
    prefs = Preferences.userRoot().node(this.getClass().getName());
    String ID1 = "Test1";
    String ID2 = "Test2";
    String ID3 = "Test3";

    // First we will get the values
    // Define a boolean value
    System.out.println(prefs.getBoolean(ID1, true));
    // Define a string with default "Hello World
    System.out.println(prefs.get(ID2, "Hello World"));
    // Define a integer with default 50
    System.out.println(prefs.getInt(ID3, 50));

    // now set the values
    prefs.putBoolean(ID1, false);
    prefs.put(ID2, "Hello Europa");
    prefs.putInt(ID3, 45);

    // Delete the preference settings for the first value
    prefs.remove(ID1);
Ok, das funktioniert. Allerdings bekomme ich die Warnung:
Jän 23, 2021 5:40:58 PM java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.

Weiters ist mir nicht ganz klar was die Belegung der prefs Felder mit Test1, Test2 und Test3 bedeuten.
 
Die Java Preferences bedient zwei "Bäume": den Benutzer-Baum und den System-Baum. Man kann ein eigenes Backend für Java Preferences schreiben (genannt Backing Store), aber nur wenige Entwickler tun dies, so dass sie mit dem Standard-Backing Store des JDK enden. Auf einer Windows-Plattform ist dies die Win-Registry, genauer gesagt:

Der Benutzerbaum wird in HKEY_CURRENT_USER\Software\JavaSoft\Prefs geschrieben (der Betriebssystembenutzer hat hier immer Schreibzugriff)
Der Systembaum wird in HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs geschrieben (nur ein OS-Benutzer mit Admin-Rechten hat hier Schreibzugriff)

Du solltest es also so:
Java:
Preferences prefs = Preferences.userNodeForPackage(Gadget.class);
versuchen falls dein aktueller Benutzer nicht über Admin-Berechtigungen verfügt.
Ich gehe eigentlich immer davon aus, das man bei der Programmierung nicht einfach abschreibt, sondern sich selbst mit der Materie auseinandersetzt.
Test1, Test2 und Test3: sind nur Beispiele, du kannst hier deine eigenen Namen für die Einstellungen verwenden.
 

Zurück
Oben