Property-File lesen und schreiben

C

Camino

Gast
Hallo,

ich habe eine Swinganwendung, die in einem ausführbaren JAR liegen wird. Ich hab im Build-Path unter /resources/properties/ eine Propertiesdatei, welche so eingelesen wird:

Java:
...
	String propFile = "/resources/properties/user.conf";

	Properties prop = new Properties();
		
	try {
		InputStream instream = this.getClass().getResourceAsStream( propFile );
    		prop.load( instream );
    	} catch ( IOException ex ) {
    		ex.printStackTrace();
        }
...

Das klappt soweit auch prima. Ich kann die Properties einlesen und in meiner Anwendung auf die Werte zugreifen.

Wenn ich nun aber die Properties ändern möchte und wieder in der Datei abspeichern will, bekomme ich eine FileNotFoundException (No such file or directory), obwohl die Datei in diesem Verzeichnis liegt. Schreiben versuche ich so (hab ich nach Recherche im Internet so gefunden):

Java:
...
    	URL url =
    		this.getClass().getResource( propFile );
 
        if (url == null)
            return;
 
        File file = new File( url.getFile() );
 
        try {
            BufferedOutputStream bos =
                new BufferedOutputStream(new FileOutputStream( file ));
            if (bos == null)
                throw new IOException( "bos was null" );
                
            prop.store( bos, "Configuration" );
            
 
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

...

Kann mir jemand verraten, was ich falsch mache und einen Tipp geben, wie ich die Werte wieder in der Property-Datei abspeichern kann? Ich hatte irgendwo gelesen, dass es evtl. nicht möglich ist, so eine Property-Datei wieder in ein JAR zu schreiben/speichern. Aber irgendeine Möglichkeit muss es doch geben...

Viele Grüsse
Camino
 

Michael...

Top Contributor
In einem jar liegen keine Dateien im eigentlichen Sinn.
Einträge in einem jar können aus dem Programm heraus nicht geändert werden.
==> die Property Dateien nicht mit ins Java Archiv stecken.
 
C

Camino

Gast
In einem jar liegen keine Dateien im eigentlichen Sinn.
Hmm, seltsam. Ich dachte immer, in einem JAR-File sind mehrere Dateien reingepackt. Wenn ich das mit dem Archivmanager öffne, sehe ich jedenfalls mehrere Dateien (z.B. class-Dateien, oder auch meine Bilder, die ich als Resource da drin hab) sowie eine Ordnerstruktur.

Einträge in einem jar können aus dem Programm heraus nicht geändert werden.
==> die Property Dateien nicht mit ins Java Archiv stecken.
OK, werde ich mal versuchen und mich dann wieder melden...

Grüsse
Camino
 

Michael...

Top Contributor
Wie Du Du schon sagst, die Dateien werden da reingepackt --> stecken also komprimiert innerhalb einer Datei und sind somit Einträge bzw. Bestandteil einer Datei.
 

Dit_

Bekanntes Mitglied
Speichere doch einfach die Einstellungen in der Registry. So wird keine Datei gebraucht.
Problemloses lesen und schreiben. ;)
 

Michael...

Top Contributor
Problemloses lesen und schreiben. ;)
Wir haben hier ein paar Applikationen laufen, mit denen ich Dir das Gegenteil beweisen kann ;-)
Aber für kleinere Applikationen die nur auf wenigen Clients laufen trifft das sicherlich zu bzw. eventuelle Probleme wären schnell zu beheben.

Ich bevorzuge aber weiterhin ein Property-File im "Installations"verzeichnis.
 
C

Camino

Gast
Wie Du Du schon sagst, die Dateien werden da reingepackt --> stecken also komprimiert innerhalb einer Datei und sind somit Einträge bzw. Bestandteil einer Datei.

OK, danke. Wieder was dazugelernt...
Das mit der Properties-Datei ausserhalb des JARs lesen und schreiben klappt jetzt auch. Ich werde das auch lieber so machen, anstatt die Lösung mit der Registry, da somit auch die User die Möglichkeit haben, später die Daten per Hand in dem Textfile zu ändern.

Grüsse und Danke
Camino
 

Dit_

Bekanntes Mitglied
Wir haben hier ein paar Applikationen laufen, mit denen ich Dir das Gegenteil beweisen kann ;-)
:rtfm: kannst du mal bitte genauer erklären was da schief gehen kann? damit ich ggf meine Anwendung umcode :)

P.S. falls man die Anwendung installiert dann ist die Datei am besten geeignet, ist schon richtig, da hat man alles an einem Ort (leichtere Deinstallation usw.)

würde aber gern die Nachteile der Registry wissen :oops:

danke schon mal
 
C

Camino

Gast
Gibt es eigentlich die Möglichkeit, eine Properties-Datei nach eigenen Wünschen zu gestalten? Also, die Einträge sortieren und gruppieren und mit Kommentaren und Leerzeilen versehen. Oder müsste ich dann "per Hand" eine Textdatei anlegen?
 

Dit_

Bekanntes Mitglied
zB so:

HTML:
#kommentar
#omg windowTitle in config datei?
window.title = Mein Fenster
window.width = 550
 
C

Camino

Gast
Ähm, ich meinte natürlich beim Abspeichern der Properties-Datei. Per Hand anlegen kann ich die Gestaltung und Struktur ja auch, aber beim Abspeichern geht das wohl wieder verloren. Es wird nur der Titel, ein Timestamp und die Key/Value-Einträge in die Datei reingeschrieben.
 
G

Gastredner

Gast
Gibt es eigentlich die Möglichkeit, eine Properties-Datei nach eigenen Wünschen zu gestalten? Also, die Einträge sortieren und gruppieren und mit Kommentaren und Leerzeilen versehen. Oder müsste ich dann "per Hand" eine Textdatei anlegen?
ini4j sollte das können.
Einstellungsdateien würde ich auch eher in das Home-Verzeichnis des Benutzers legen bzw. an den Ort, auf den die System-Property user.home verweist. Bei manchen Betriebssystemen (Windows 7 z. B.) kann es sonst vorkommen, dass ein Benutzer Einstellungen des Programms nicht ändern kann, weil er keine Schreibrechte auf den Programmordner besitzt (wenn das Programm z. B. im Programme-Ordner von Windows landet und der Benutzer keine Admin-Rechte hat bzw. das Programm nicht mit diesen ausgeführt wird).
 
C

Camino

Gast
ini4j sollte das können.
Einstellungsdateien würde ich auch eher in das Home-Verzeichnis des Benutzers legen bzw. an den Ort, auf den die System-Property user.home verweist. Bei manchen Betriebssystemen (Windows 7 z. B.) kann es sonst vorkommen, dass ein Benutzer Einstellungen des Programms nicht ändern kann, weil er keine Schreibrechte auf den Programmordner besitzt (wenn das Programm z. B. im Programme-Ordner von Windows landet und der Benutzer keine Admin-Rechte hat bzw. das Programm nicht mit diesen ausgeführt wird).
OK, daran hab ich ja noch garnicht gedacht. Aber eigentlich wäre es mir lieber, wenn diese Property-Datei direkt auch beim Programm liegt. Na ja, muss ich nochmal drüber nachdenken. Im Moment soll das Programm eigentlich unter Linux laufen, aber man weiss ja nie...

Und wegen dem ini4j: eigentlich wäre es mir ja lieber, so viel wie möglich aus Java direkt zu benutzen und weniger auf externe API. Mal schauen, vielleicht programmier ich mir ja auch selbst was zusammen...

Danke für die Infos
Camino
 

nrg

Top Contributor
Und wegen dem ini4j: eigentlich wäre es mir ja lieber, so viel wie möglich aus Java direkt zu benutzen und weniger auf externe API. Mal schauen, vielleicht programmier ich mir ja auch selbst was zusammen...

ich würde mich da fragen, was zuerst da ist.

wenn du intern konfiguration speichern willst, würde ich eine properties-datei nehmen. das aussehen und der aufbau interessiert da keinen und du kannst bequem die konfiguration auslesen.

wenn du die konfiguration des programmes vorher vornehmen möchstest, würde ich eher zu einer ini raten, weil das einfach imho deutlich übersichtlicher und schöner ist.

für größere sachen sollte man ne db nehmen.
 
C

Camino

Gast
ich würde mich da fragen, was zuerst da ist.

wenn du intern konfiguration speichern willst, würde ich eine properties-datei nehmen. das aussehen und der aufbau interessiert da keinen und du kannst bequem die konfiguration auslesen.

wenn du die konfiguration des programmes vorher vornehmen möchstest, würde ich eher zu einer ini raten, weil das einfach imho deutlich übersichtlicher und schöner ist.

für größere sachen sollte man ne db nehmen.

Ja, muss ich mir nochmal durch den Kopf gehen lassen, ob es wirklich notwendig und gewünscht ist, dass die späteren User die Daten evtl. auch per Hand in der Datei ändern sollen können, oder ob die User diese Konfigurationsdatei nur über die Anwendung ändern sollen. Je nachdem werde ich dann Properties-Datei oder ini-File nehmen.

Ist eh eine grössere Anwendung, bei der schon eine Datenbank zum Einsatz kommt. Nur habe ich jetzt zwei verschiedene Konfigurationsmöglichkeiten: einmal global, die für alle User gelten. Das hab ich in der Datenbank gespeichert. Und dann sollen aber auch noch die jeweiligen User für sich (lokal) Konfigurationen vornehmen können, welche in einer Konfigurationsdatei auf der jeweiligen Arbeitsstation gespeichert werden sollen.

Camino
 
G

Gastredner

Gast
OK, daran hab ich ja noch garnicht gedacht. Aber eigentlich wäre es mir lieber, wenn diese Property-Datei direkt auch beim Programm liegt. Na ja, muss ich nochmal drüber nachdenken. Im Moment soll das Programm eigentlich unter Linux laufen, aber man weiss ja nie...
Solange das Problem nur an Stellen liegt, wo der Ausführende definitiv alle Rechte hat (z. B. im home-Verzeichnis), ist dies absolut kein Problem.

Und wegen dem ini4j: eigentlich wäre es mir ja lieber, so viel wie möglich aus Java direkt zu benutzen und weniger auf externe API. Mal schauen, vielleicht programmier ich mir ja auch selbst was zusammen...
Anders ausgedrückt: du willst eine ausgereifte und vielfach erprobte kleine API, die genau bietet was du benötigst, ersetzen durch ein Eigenkonstrukt, welches mit einer guten Wahrscheinlichkeit weniger performant und durchdacht ist und zudem vermutlich Bugs enthalten wird?
Gut, wenn es darum geht, dass man es mal gerne aus Wissensdurst machen würde, ist das kein Problem. Aber ansonsten würde ich eher zur erprobten Bibliothek tendieren, damit hat man weniger Kopfschmerzen.
 

Dit_

Bekanntes Mitglied
Ähm, ich meinte natürlich beim Abspeichern der Properties-Datei. Per Hand anlegen kann ich die Gestaltung und Struktur ja auch, aber beim Abspeichern geht das wohl wieder verloren. Es wird nur der Titel, ein Timestamp und die Key/Value-Einträge in die Datei reingeschrieben.

dafür brauchst du nur eine methode save() zu schreiben und bestimmt keine extra API mit dützend anderen Funktionalitäten, nur um diese eine Kleinigkeit zu erledigen.

//Vorbereitung kann auch beim Laden der Einstellungen erfolgen
  1. Lese alte Datei Zeile für Zeile
  2. Merke Kommentar
    Code:
    line.startsWith("#")
  3. Merke Schluessel der nach dem Kommentar kommt.
  4. Lege kommentar in einer HashMap ab

//Einstellungen speichern

  1. Durchlaufe alle Schluessel
    Code:
    for(String key : preferences.keys())
  2. Gibt es einen Kommentar für key?
  3. Wenn ja: hole Kommentar aus der map und schreibe in die Datei.
  4. Schreibe danach
    Code:
    key + '=' + preferences.get(key, "irgendeinDefaultWert")
    als nächste Zeile
Fertig.

Wenn du eine Klasse hast, die nur für das Laden/Speichern der Einstellungen zuständig ist, wird diese nun um max 20 Zeilen größer.
 
C

Camino

Gast
Solange das Problem nur an Stellen liegt, wo der Ausführende definitiv alle Rechte hat (z. B. im home-Verzeichnis), ist dies absolut kein Problem.
OK.

Anders ausgedrückt: du willst eine ausgereifte und vielfach erprobte kleine API, die genau bietet was du benötigst, ersetzen durch ein Eigenkonstrukt, welches mit einer guten Wahrscheinlichkeit weniger performant und durchdacht ist und zudem vermutlich Bugs enthalten wird?
Hehe, genauso hab ich mir das vorgestellt... ;-)

Gut, wenn es darum geht, dass man es mal gerne aus Wissensdurst machen würde, ist das kein Problem. Aber ansonsten würde ich eher zur erprobten Bibliothek tendieren, damit hat man weniger Kopfschmerzen.
Ja, das Dazulernen ist bei mir (auch) ein wichtiger Faktor. Aber mir geht es oft so, dass ich vor einem kleinen Problem stehe und eine Lösung suche, und mir dann eine solche externe API oftmals zu überdimensioniert für mein Problemchen vorkommt. Na ja, ich schaue nochmal, ob ich mit den normalen Properties-Dateien auskomme oder ob ich ein INI-File brauche. Dann schau ich mir das nochmal genauer an.

Danke
Camino
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T @NotBlank verwendet nicht message aus .property-File Allgemeine Java-Themen 4
U Property File - Gruppieren/Strukturieren Allgemeine Java-Themen 5
S Property File auslesen Allgemeine Java-Themen 19
D Property File auslesen in JTextFiled Allgemeine Java-Themen 4
E System property setzten Allgemeine Java-Themen 8
ralfb1105 Java LogManager property bestimmen/ausgeben Allgemeine Java-Themen 1
VfL_Freak JDK installieren System-Property "user.dir" Allgemeine Java-Themen 6
X Property- Keys und Values mit Tab getrennt Allgemeine Java-Themen 12
S Datentypen Warum ist bei Arrays die Länge als Property aufrufbar? Allgemeine Java-Themen 1
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
L Gibt es in Java einen Property Editor? Allgemeine Java-Themen 2
Y Property Datei einlesen Allgemeine Java-Themen 2
U Property Grid für java? Allgemeine Java-Themen 12
G suche Property alternative Allgemeine Java-Themen 4
K "Too many open files" bei Property List Allgemeine Java-Themen 5
J java beans property editor Allgemeine Java-Themen 3
P Property Problem ! Allgemeine Java-Themen 8
foobar java.library.path Property setzen Allgemeine Java-Themen 5
C struts <html:checkbox property="Array[x]"> ? Allgemeine Java-Themen 2
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
D Read JSON File Problem Allgemeine Java-Themen 9
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
C jar File mehrfach aufrufen (als Windows Dienst) Allgemeine Java-Themen 5
N File Path mit Variablen angeben Allgemeine Java-Themen 1
izoards Zugriff auf gemeinsame Ressource (CSV-File) Allgemeine Java-Themen 3
S Class File Editor -> Source not found Allgemeine Java-Themen 4
F jar File ausführen Allgemeine Java-Themen 14
M File Binary Representation Allgemeine Java-Themen 1
N jar File auf Mac mit Doppelklick starten Allgemeine Java-Themen 5
O Input/Output java.io.File beenden Allgemeine Java-Themen 5
G File not found - nach dem Kompilieren Allgemeine Java-Themen 6
T Jar File zu exe... Allgemeine Java-Themen 3
M Foreign Memory API / Memory-Mapped File Allgemeine Java-Themen 0
R Delete files before creating new from temp using Java file method Allgemeine Java-Themen 1
S File lesen und schreiben Java 6 Allgemeine Java-Themen 2
T String-Manipulation beim Ablauf in Eclipse und als JAR-File Allgemeine Java-Themen 8
F Input/Output FileNotFoundException, obwohl File existiert Allgemeine Java-Themen 5
G Excel File öffnen, in Zelle schreiben, abspeichern Allgemeine Java-Themen 6
L JAR-File auf Ilias (LMS) laufen lassen Allgemeine Java-Themen 0
ralfb1105 Classpath Directory fuer Properties File Allgemeine Java-Themen 2
L File beim Kopieren in einen anderen Ordner umbenennen Allgemeine Java-Themen 6
J File in Package erstellen & lesen mit Programmstart in externe Projekt Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
A File lesen Codierung Charset Allgemeine Java-Themen 5
J .java-Dateitext Compile zur Laufzeit ohne File Allgemeine Java-Themen 15
M Key-File im selben Ordner speichern? Allgemeine Java-Themen 18
I TrueZip add file to archive Allgemeine Java-Themen 10
T Probleme mit dem Pfad zum Propertie file Allgemeine Java-Themen 7
J ftp - delete file ohne appache Allgemeine Java-Themen 8
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
T ImageIO.read -> Can`t read input file Allgemeine Java-Themen 11
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
C Swing File[] als klickbare links in irgendeinem Swing Element Allgemeine Java-Themen 3
H Kennt sich jemand mit Eclipse und dem Thema Jar-File aus ? Allgemeine Java-Themen 6
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
C Authentifizierung mit java.nio.file? Allgemeine Java-Themen 5
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
M xlsx File auslesen Exception occured Allgemeine Java-Themen 13
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
G Java/LibGDX File Loading Exception Allgemeine Java-Themen 2
Cromewell JavaFX FXML-File lädt unter Ubuntu nicht Allgemeine Java-Themen 7
D Java Anwendung mit dll File Allgemeine Java-Themen 5
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
thet1983 Input/Output read properties file from classpath Allgemeine Java-Themen 3
J Umwandeln von URL zu File und danach kopieren geht nicht Allgemeine Java-Themen 1
J Properties file ändern Allgemeine Java-Themen 12
S Executable Jar File startet nicht unter Windows 10 Allgemeine Java-Themen 3
B Objekte anhand von Properties file Allgemeine Java-Themen 41
Dechasa Input/Output Write into File Allgemeine Java-Themen 2
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
H Security Manager (IIOException: Can't read input file!) Allgemeine Java-Themen 2
H File.listFiles() funktioniert nicht... Allgemeine Java-Themen 10
C Input/Output Problem bei Datei verschiebung mit File.move und Paths.get() Allgemeine Java-Themen 26
X Zeile unter einer bestimmen Zeile hinzufügen(File) Allgemeine Java-Themen 1
F Open source file übersetzen Phython -> Java Allgemeine Java-Themen 4
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
M Desktop jar File icon Ändern? Allgemeine Java-Themen 14
O Sax-Parser ließt XML-File doppelt Allgemeine Java-Themen 1
J Java Software Compare Files und Neue File erstellen Allgemeine Java-Themen 0
Thallius Custom File Chooser Allgemeine Java-Themen 1
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
J Java Download Filedownload File.getFileName Allgemeine Java-Themen 3
R Java .class-File-Konstrunkt mit Programm visualisieren Allgemeine Java-Themen 18
G SecurityManager/Policy-File/Reflection Allgemeine Java-Themen 0
M pdf File bzw. ausgefüllte pdf Formulare drucken Allgemeine Java-Themen 2
S Input/Output File Not Found FileReader Allgemeine Java-Themen 6
Thallius Serialisiertes File kann auf anderem Rechner nicht geladen werden Allgemeine Java-Themen 12
P Java Dynamic Web Project -> config File Allgemeine Java-Themen 1
S runnable jar file in Verbindung mit itext Allgemeine Java-Themen 3
D Variablen java.io.File zum vergleichen abspeichern Allgemeine Java-Themen 1
M File IO Klasse ... wie einbinden Allgemeine Java-Themen 6
O Freies Tool zum Jar-File obfuscaten gesucht! Allgemeine Java-Themen 5
F File.listFiles ohne .sort Allgemeine Java-Themen 6
B XML File JAXB Allgemeine Java-Themen 0
S Platzverbrauch, File oder String Allgemeine Java-Themen 14
J Runnable jar-File: Fehlermeldung Allgemeine Java-Themen 2
P Kurze Frage: aus einer File die Zeilenanzahl auslesen Allgemeine Java-Themen 9
K Gepacktes Jar-File gibt beim Doppelklick eine Exception aus Allgemeine Java-Themen 4
P java.nio.file unter Java 6 verwenden Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben