Properties sortieren

Status
Nicht offen für weitere Antworten.

*java*

Mitglied
hallo,

neue anfänger frage, neues glück :D

also, ich habe eine property datei dort befinden sich mehrere daten drin.
wenn ich die jetzt auslese bekomme ich das ganze unsortiert. wie kann ich es machen, dass die daten so ausgelesen werden wie sich in der datei stehen? warum stehen die eigentlich unsortiert dadrin. ich habe sie doch mit put nacheinader reingelegt?


Code:
Properties conf = new Properties ();
//werden gefüllt mit daten aus einer datei

Iterator it = conf.keySet().iterator();
	   while (it.hasNext()) {
		  String key = (String)it.next();
		  System.out.println(key + " = " + conf.get(key));
	   }

vielen dank gruß
 

Leroy42

Top Contributor
java.util.properties ist eine Klasse, die Hashtable erweitert.

Alle Hashs sind von Haus aus unsortiert!
 
G

Gast

Gast
@Leroy42 nicht böse sein, aber warum sind Hashs unsortiert?
Ist es nicht der Sinn das man bei einer Hashtable über den Hash sucht, bzw. einsortiert. Dadurch sollten die Inhalte doch nach dem Hash sortiert sein?
 

Murray

Top Contributor
Gast hat gesagt.:
Ist es nicht der Sinn das man bei einer Hashtable über den Hash sucht, bzw. einsortiert.
Sucht (bzw. findet): ja
einsortiert: nein

Gast hat gesagt.:
Dadurch sollten die Inhalte doch nach dem Hash sortiert sein?
Nö, die Reihenfolge ist ein Implementierungsdetail und als solches nicht explizit definiert - es ist durchaus möglich, dass sich die Reihenfolge von einem Programmdurchlauf zum nächsten unterscheidet, obwohl sich die zugrundeliegende Property-Datei zwischenzeitlich nicht geändert hat.
 
D

d.meinig

Gast
Einfach mal eine eigene Klasse implementieren:



Code:
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Date;
import java.util.InvalidPropertiesFormatException;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;

/**
 * @author Dierk Meinig
 * Sortiert die Properties in natuerlicher Folge bei der Speicherung
 */
public class SortedProperties extends Properties
{

	/**
	 * 
	 */
	private static final long serialVersionUID = 8394964014128693064L;
	
	private static SortedMap<Object, Object> map =new TreeMap<Object, Object>();
	
	/*
	 *  (non-Javadoc)
	 * @see java.util.Hashtable#keySet()
	 * Fuer die Sortierung der XML-Ausgabe
	 * ueberschrieben
	 */
	public Set<Object> keySet()
	{
		map.putAll(this);
		return map.keySet();
	}
	
	/*
	 *  (non-Javadoc)
	 * @see java.util.Properties#load(java.io.InputStream)
	 * laedt alle Properties auch in die sortierte map
	 */
	public synchronized void load(InputStream inStream) throws IOException
	{
		super.load(inStream);
		map.putAll(this);
	}
	
	/*
	 *  (non-Javadoc)
	 * @see java.util.Properties#loadFromXML(java.io.InputStream)
	 * laedt alle Properties auch in die sortierte map
	 */
    public synchronized void loadFromXML(InputStream in)throws IOException, InvalidPropertiesFormatException 
    {
    	super.loadFromXML(in);
		map.putAll(this);
    }
    
    /*
     *  (non-Javadoc)
     * @see java.util.Properties#setProperty(java.lang.String, java.lang.String)
     * schreibt Property auch in die sortierte map
     */
	public synchronized Object setProperty(String key, String value) 
	{
		map.putAll(this);
		Object o = super.setProperty(key, value);
		map.put(key, value);
        return o;
    }

	/*
	 *  (non-Javadoc)
	 * @see java.util.Dictionary#remove(java.lang.Object)
	 * entfernt eine Property auch aus der sortierten map
	 */
	public synchronized Object remove(Object key)
	{
		map.putAll(this);
		Object o = super.remove(key);
		map.remove(key);
		return o;
	}
	
	/*
	 *  (non-Javadoc)
	 * @see java.util.Properties#store(java.io.OutputStream, java.lang.String)
	 * ueberschrieben, um mit den Keys der sortierten Map zu arbeiten
	 */
    public synchronized void store(OutputStream out, String comments)
    throws IOException
    {
        BufferedWriter awriter;
        awriter = new BufferedWriter(new OutputStreamWriter(out, "8859_1"));
        if (comments != null)
            writeln(awriter, "#" + comments);
        	writeln(awriter, "#" + new Date().toString());

        	// Hier wird mit den Keys der sortierten Map gearbeitet
        	// die Werte und Keys für die Ausgabe werden aus der
        	// Super geholt
        Iterator it = keySet().iterator();
//        for (Enumeration e = keys(); e.hasMoreElements();) 
        while(it.hasNext())
        {
            String key = (String) it.next();//(String)e.nextElement();
            String val = (String)get(key);
            key = saveConvert(key, true);

	    /* No need to escape embedded and trailing spaces for value, hence
	     * pass false to flag.
	     */
            val = saveConvert(val, false);
            writeln(awriter, key + "=" + val);
        }
        awriter.flush();
    }
    
    /*
     * keine Aenderungen zu super, war not visible
     */
    private static void writeln(BufferedWriter bw, String s) throws IOException {
        bw.write(s);
        bw.newLine();
    }
    
    /*
     * keine Aenderungen zu super, war not visible
     */
    private String saveConvert(String theString, boolean escapeSpace) {
        int len = theString.length();
        int bufLen = len * 2;
        if (bufLen < 0) {
            bufLen = Integer.MAX_VALUE;
        }
        StringBuffer outBuffer = new StringBuffer(bufLen);

        for(int x=0; x<len; x++) {
            char aChar = theString.charAt(x);
            // Handle common case first, selecting largest block that
            // avoids the specials below
            if ((aChar > 61) && (aChar < 127)) {
                if (aChar == '\\') {
                    outBuffer.append('\\'); outBuffer.append('\\');
                    continue;
                }
                outBuffer.append(aChar);
                continue;
            }
            switch(aChar) {
		case ' ':
		    if (x == 0 || escapeSpace) 
			outBuffer.append('\\');
		    outBuffer.append(' ');
		    break;
                case '\t':outBuffer.append('\\'); outBuffer.append('t');
                          break;
                case '\n':outBuffer.append('\\'); outBuffer.append('n');
                          break;
                case '\r':outBuffer.append('\\'); outBuffer.append('r');
                          break;
                case '\f':outBuffer.append('\\'); outBuffer.append('f');
                          break;
                case '=': // Fall through
                case ':': // Fall through
                case '#': // Fall through
                case '!':
                    outBuffer.append('\\'); outBuffer.append(aChar);
                    break;
                default:
                    if ((aChar < 0x0020) || (aChar > 0x007e)) {
                        outBuffer.append('\\');
                        outBuffer.append('u');
                        outBuffer.append(toHex((aChar >> 12) & 0xF));
                        outBuffer.append(toHex((aChar >>  8) & 0xF));
                        outBuffer.append(toHex((aChar >>  4) & 0xF));
                        outBuffer.append(toHex( aChar        & 0xF));
                    } else {
                        outBuffer.append(aChar);
                    }
            }
        }
        return outBuffer.toString();
    }
    
    /*
     * keine Aenderungen zu super, war not visible
     */
    private static char toHex(int nibble) {
    	return hexDigit[(nibble & 0xF)];
        }

    /*
     * keine Aenderungen zu super, war not visible
     */
        /** A table of hex digits */
        private static final char[] hexDigit = {
    	'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
        };

}
 
D

d.meinig

Gast
Code:
import java.util.Collections;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.Vector;

/**
 * @author Dierk Meinig
 * Sortiert die Properties in natuerlicher Folge bei der Speicherung
 */
public class SortedProperties extends Properties
{

	/**
	 * 
	 */
	private static final long serialVersionUID = 8394964014128693064L;
	
	/*
	 * (non-Javadoc)
	 * @see java.util.Hashtable#keys()
	 */
	public synchronized Enumeration keys() {
		Enumeration keysEnum = super.keys();
		Vector keyList = new Vector();
		while(keysEnum.hasMoreElements()){
		keyList.add(keysEnum.nextElement());
		}
		Collections.sort(keyList);
		return keyList.elements();
		}
	
	/* (non-Javadoc)
	 * @see java.util.Hashtable#keySet()
	 * used in storeToXml
	 */
	public Set<Object> keySet()
	{
		SortedSet set = new TreeSet( super.keySet());
		return set;
	}
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Ein paar Fragen zu .properties und .css Allgemeine Java-Themen 6
S Test mit Werten aus der .properties Allgemeine Java-Themen 4
S class path resource [config.properties}] cannot be opened because it does not exist Allgemeine Java-Themen 4
ralfb1105 Classpath Directory fuer Properties File Allgemeine Java-Themen 2
K Properties serializable machen Allgemeine Java-Themen 6
KeVoZ_ Properties mit String auslesen Allgemeine Java-Themen 11
thet1983 Input/Output read properties file from classpath Allgemeine Java-Themen 3
Baldur BeanInfo für Properties-UI? Allgemeine Java-Themen 1
J Properties file ändern Allgemeine Java-Themen 12
B Objekte anhand von Properties file Allgemeine Java-Themen 41
W Input/Output Kann .properties Datei in kompilierter .jar nicht ändern Allgemeine Java-Themen 2
Thallius Speicherverhalten von Properties und mehreren Threads Allgemeine Java-Themen 5
T [log4j] Wie nutzt man log4j.properties? Allgemeine Java-Themen 7
I Best Practice Properties auslesen und splitten (RegExp?) Allgemeine Java-Themen 0
OnDemand Lesen aus Properties Allgemeine Java-Themen 7
D JAVA - Properties Datei mit Userdaten Allgemeine Java-Themen 7
M StripesResources.properties Allgemeine Java-Themen 2
GUI-Programmer Mehr als Properties Allgemeine Java-Themen 6
C Dynamisches und sortiertes Auslesen von Properties Allgemeine Java-Themen 2
Mr. Pink Erste Schritte Checkstyle.properties Allgemeine Java-Themen 3
B Properties File Liste Allgemeine Java-Themen 3
X Probleme mit meinem Properties Allgemeine Java-Themen 9
T Wahrscheinlich Problem mit log4j.properties Allgemeine Java-Themen 19
D Properties Datei, Eingabequelle Allgemeine Java-Themen 6
S Stilfrage bezüglich Beans mit Collection-Properties Allgemeine Java-Themen 2
C JAR, Pfad und Properties Allgemeine Java-Themen 17
R Properties Datei aus Applikationsverzeichnis lesen Allgemeine Java-Themen 5
T Properties Datei nicht jedes mal neu schreiben? Allgemeine Java-Themen 2
reibi Separator in java.util.Properties-Files Allgemeine Java-Themen 3
K Serialisierung in Properties-Datei möglich? Allgemeine Java-Themen 3
M Probleme mit UTF-8 und properties Allgemeine Java-Themen 6
C log4j.properties wird nicht verwendet?? Allgemeine Java-Themen 3
T Properties Datei nicht löschbar Allgemeine Java-Themen 8
S Properties binden Allgemeine Java-Themen 2
nrg Knotenpunkte in Properties Allgemeine Java-Themen 9
U Properties in Jar Files Allgemeine Java-Themen 3
S Properties-Dateien anwenden Allgemeine Java-Themen 8
G Alternative zu .properties Dateien Allgemeine Java-Themen 20
nabla Gutes einlesen von Konfigurationsdateien (Properties?) Allgemeine Java-Themen 11
E Properties +SerialPort Allgemeine Java-Themen 9
H Java Properties Allgemeine Java-Themen 5
A kann nicht auf properties außerhalb jar zugreifen Allgemeine Java-Themen 3
T CP Problem: Webstart + Logging properties file + eigener Handler Allgemeine Java-Themen 7
Y Properties verwalten! Allgemeine Java-Themen 3
G externe Properties datei aus Jar File heraus lesen Allgemeine Java-Themen 12
M Databinding von Object zu properties-Datei Allgemeine Java-Themen 10
F Properties verschlüsselt speichern Allgemeine Java-Themen 5
W Properties-Klasse: mehrere Parameter-Belegungen übergeben? Allgemeine Java-Themen 2
K settings.properties in den src-ordner schreiben Allgemeine Java-Themen 2
J Wo werden die System properties gespeichert Allgemeine Java-Themen 12
DEvent log4j, commons logging, log4j.properties and co Allgemeine Java-Themen 12
D Ordner mit *.properties in classpath ? Allgemeine Java-Themen 5
P Encoding-Probleme bei Properties-Dateien Allgemeine Java-Themen 5
A Hardware Properties auslesen Allgemeine Java-Themen 10
P Properties liest nicht alles aus Datei aus Allgemeine Java-Themen 17
I Properties.contains("Hell*orld"); Allgemeine Java-Themen 14
G Probleme beim Sichern von Properties Allgemeine Java-Themen 2
N Java Properties Allgemeine Java-Themen 14
L "globale" properties Datei Allgemeine Java-Themen 4
V Properties Key als String mit =? Allgemeine Java-Themen 3
G Beans und transiente Properties Allgemeine Java-Themen 4
MQue properties- Datei Allgemeine Java-Themen 2
M Pattern aus Properties Allgemeine Java-Themen 3
R Problem bei schreiben von properties Allgemeine Java-Themen 6
R Properties Datei ändern Allgemeine Java-Themen 4
P log4j: Übersicht der Properties Allgemeine Java-Themen 5
R Properties dateien in Jar beschreiben Allgemeine Java-Themen 2
L properties auslesen funktioniert nicht(java.util.Properties) Allgemeine Java-Themen 3
G properties datei aktualisieren Allgemeine Java-Themen 4
J Properties editieren. Allgemeine Java-Themen 10
V log4j.properties wird in der jar Datei nicht gefunden? Allgemeine Java-Themen 2
V INI Files, Properties etc. Allgemeine Java-Themen 7
K Cast von Properties und Hashmap Allgemeine Java-Themen 9
A Mehrzeiligen Eintrag in Ressourcebundle (.properties-Datei) Allgemeine Java-Themen 8
B Wohin mit log4j.properties Allgemeine Java-Themen 2
B MannoMann Properties Allgemeine Java-Themen 12
G Properties Datei verschlüsseln. WIE? Allgemeine Java-Themen 6
G Einzelne Keys aus Properties-Datei auslesen Allgemeine Java-Themen 4
S Zugriff auf Properties-Datei Allgemeine Java-Themen 10
J ResourceBundle / properties-datei während der Laufzeit verän Allgemeine Java-Themen 6
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
K Verbesserung der Laufzeit beim Sortieren von Einwohnern nach ihrem Geburtsjahr Allgemeine Java-Themen 0
Willi.We Array sortieren Allgemeine Java-Themen 5
L ArrayList sortieren Allgemeine Java-Themen 2
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
C MySQL Tabellen sortieren. Allgemeine Java-Themen 33
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
B Java Mail: Emails sortieren? Allgemeine Java-Themen 5
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
P Wertepaare sortieren Allgemeine Java-Themen 3
MiMa Sortieren nach Stellenangaben Allgemeine Java-Themen 7
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
P Listen sortieren Allgemeine Java-Themen 1
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
K Strings sortieren: 2 Kritieren Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben