Schlüsselworte Probleme mit den Properties

Times

Bekanntes Mitglied
Hallo liebe Java-Forum Community,

zuersteinmal möchte ich mich entschuldigen wenn dieses Thema bereits angesprochen wurde, aber ich zu dumm war die SuFu zu benutzen. Meistens wähle ich einfach die falschen Stichwörter um solche Themen zu finden 🙁 ... nunja.. ich geb mein bestes

Also ich bin noch ein richtiger Java-Anfänger, aber habe mich vor einer weile entschieden mir Java anzueignen, da ich auf der Arbeit mit VBA (ja.. ._.) arbeite und ich damit einfach im späteren Berufsleben keine Chancen haben werde. In der Schule lernen wir nur Grundkenntnisse die man in den einzelnen Sprachen haben sollte (Klassen, Objekte, Methoden... und das ganze Zeug.)
Also ich bin in einer Ausbildung zum Fachinformatiker - Anwendungsentwicklung.
Wie schon gesagt versuche ich nun mir Java beizubringen, und habe mir dafür nun (ich hoffe ich darf des posten und des zählt nicht unter Fremdwerbung) die beiden Bücher "Java ist auch eine Insel" und "Java ist mehr als eine Insel " (J7) zugelegt.

Nun bei mir ist es so.. das das reine lesen mir einfach nichts beibringt. Daher lese ich immer mal wieder ein bisschen in einer festen Reihenfolge aber fang nebenbei auch einfach drauf an loszuprogrammieren. So lerne ich besser!

Also nun zu meinem Problem:

Bei meiner "Einfach Loslegen-Strategie" bin ich auf die .properties Datei gestoßen und meine Augen haben direkt angefangen zu funkeln... bis.. ich dann herausfand das die properties.set Methode mir die ganze Datei neuschreibt ohne die alten Daten zu behalten.
Nun.. voller Motivation habe ich mir einfach ein paar kleine eigene set Methoden gebastelt welche mir zuerst den kompletten Inhalt der Datei auslesen und danach wieder einfügen, bzw. den veränderten Wert einfügen.

Anfangs hat alles wunderbar funktioniert... doch heute kam es plötzlich vor das die Eigenschaft-NAMEN und die Eigenschaft-WERTE vertauscht wurden. Nun habe ich in meiner SE_Datenbank.properties bei Port die IP-Adresse stehen etc.

Damit Ihr euch einen besseren Eindruck davon machen könnt, was ich versuche.. werde ich einfach mal die set-Methode vorzeigen, da ihr mir ansonsten wohl auch nicht viel weiter helfen könntet.

set:
Java:
public static void set(String Datei, String Eigenschaft, String Wert)
    {

        if(Wert.equals(get(Datei, Eigenschaft)))
        {
            return;
        }
            
        FileOutputStream stream;
        Properties props = new Properties();
        
        int eigenschaft_alt_anzahl = Eigenschaftanzahl_get(Datei);
        String eigenschaften_alt_werte[][];
        
        if (eigenschaft_alt_anzahl > 0)
        {
            eigenschaften_alt_werte = Datei_auslesen(Datei,eigenschaft_alt_anzahl);
             
            try
            {
                stream = new FileOutputStream("src/properties/" + Datei + ".properties");
                
                for(int i = 0; i<= eigenschaft_alt_anzahl-1;i++)
                {   
                    if (eigenschaften_alt_werte[i][0].equals(Eigenschaft))
                    {
                        props.setProperty(Eigenschaft, Wert);
                    }
                    else
                    {
                        props.setProperty(eigenschaften_alt_werte[i][0], eigenschaften_alt_werte[i][1]);
                    }
                }
                props.store(stream, null);
                stream.close();
            }
            catch (IOException e) 
            {
                System.err.println(e);
            }
        
        }
        else
        {
            try
            {
                stream = new FileOutputStream("src/properties/" + Datei + ".properties");
                props.setProperty(Eigenschaft, Wert);
                props.store(stream, null);
                stream.close();
            }
            catch (IOException e) 
            {
                System.err.println(e);
            }
        }

    }

Datei_auslesen:
Java:
 private static String[][] Datei_auslesen(String Datei, int Eigenschaftanzahl)
    {
        BufferedInputStream stream;
        Properties props = new Properties();
        
        String ergebnis[][];
        
        try
        {
            stream = new BufferedInputStream(new FileInputStream("src/properties/" + Datei + ".properties"));
            props.load(stream);
            
            ergebnis = new String[Eigenschaftanzahl][2];
            
            Enumeration enumerat;
            enumerat = props.propertyNames();
            
            int i = 0;
            while(enumerat.hasMoreElements())
            {
                ergebnis[i][0] = enumerat.nextElement().toString();
                i+=1;
            }
            
            Collection collect = props.values();
          
            i = 0;
            for(Object obj : collect) 
            {
                ergebnis[i][1] = obj.toString();
                i+=1;
            }
            
            //for (i = 0; i<= anzahl-1; i++)
            //{
            //    System.out.println(ergebnis[i][0] + " " + ergebnis[i][1]);
            //}

            stream.close();
       
            return ergebnis;
        }
        catch (IOException e) 
        {
            System.err.println(e);
            return null;
        }
        
    }

Danke fürs lesen & hoffe auch eine schnelle Antwort 🙂

Mit lieben Grüßen

Times

PS: Bitte nicht über meine Syntax meckern, aber habe mir eine festgelegte Norm erstellt und da komm ich einfach besser klar. (z.b. Block-Klammern sollen immer auf der selben Ebene auf und zugehen!) 🙂
 
Bei meiner "Einfach Loslegen-Strategie" bin ich auf die .properties Datei gestoßen und meine Augen haben direkt angefangen zu funkeln... bis.. ich dann herausfand das die properties.set Methode mir die ganze Datei neuschreibt ohne die alten Daten zu behalten.
welche set methode ? Properties kennt nur [c]setProperty(String key, String value)[/c] und die ueberschreibt nur den Wert fuer den einen Key nicht die gesamte Properties.

Wenn es dir darum geht einfach Properties einzuladen ist ein [c]props.load(stream)[/c] genug, mehr brauchst du nicht - du machst viel zu viel komplizierte Arbeit darum, die moeglicherweise dann eben fehlerhaft ist
 
Code:
props.propertyNames()
and
Code:
props.values()
lie fern nicht diesel be reihenfolge, deswegen sind keys and values vertauscht.

Du brauchst nur
Code:
props.load()
und
Code:
props.store()
! Alles andere ist überflüssig!
 
Hey,

entschuldigt bitte für die späte Rück-Antwort meienrseits - aber ich war im Urlaub (wollt auch mal meine Ferien fern vom PC verbringen .. kaum zu glauben wie geil die Grafik da draussen ist).

Nun ich weiss nicht wieso aber nun geht es mit der Standard-Methode einwandfrei... irgendwo hab ich da wohl was falsch gemacht - nunja passiert 🙂

Ich danke euch für die Antworten

Lg

Times
 
Edit: Geht nur innerhalb von ner Stunde, danach kannst du den Beitrag nichtmehr bearbeiten. Der Button ist rechts, direkt neben dem "Zitieren" Button.

Beitrag beantwortet: Direkt unter dem letzten Post.
 
Zuletzt bearbeitet von einem Moderator:
Oh.. da hab ich wohl was falsch gemacht.. mein AdAblock blockiert hier alle Buttons.. deswegen sehe ich die nicht. Im Internet-Explorer gehts nämlich. Danke dir 🙂
 
ABP blockiert bei mir keine Buttons 😉

Zur Frage: Dasselbe Problem hatte ich letztens auch. Mit setProperty kannst du Standartwerte setzen, mit load ein File einlesen und mit store wieder speichern. Die Anweisungen (in dieser Reihenfolge) sollten eigentlich alle Möglichkeiten abdecken 😉
 

Zurück
Oben