java.util.Properties Wert von key mehrfach vorhanden

Status
Nicht offen für weitere Antworten.

---

Aktives Mitglied
Hallo,

ist es möglich in Properties keys mit gleichem Wert zu laden?
Ich lese ein File mit folgenden Inhalten (ABG 3 fach) ein:

ABG=ABK\u00DCRZUNG F\u00DCR ABGEORDNETER
ABG=test
KLAERANLAGE=ABWASSERREINIGUNG
ABG=test2
PAPYRUS=PAPIER\u00C4HNLICHES SCHREIBMATERIAL
EBENE=FLACHLAND

Code:
file = fc.getSelectedFile();
        try
        {
            InputStream in = new BufferedInputStream(new FileInputStream(file));
            Properties newWl = new Properties();
            newWl.load(in);
            in.close();
            setWordList(newWl);
          
        }
        catch(IOException ex)
        {
            handleException(ex);
        }

Beim debuggen steht in newWl nur der letzte Eintrag zuABG (ABG=test2). Die anderen werden offensichtlich überschrieben.
newWl ist übrigens eine Hashtable.
Wie kann man in der Hashtable keys mehrfach erlauben?

vielen Dank!
 

---

Aktives Mitglied
Mist, hätt ich mir vorher Gedanken machen können..

Gibt es einen anderen Container mit zusammengesetzten Schlüssel aus key + value?
 

Ebenius

Top Contributor
Statt dessen kannst Du die ganze Struktur in eine andere Collection einlesen:
Code:
final Map<String,Collection<String>> fileContent = new HashMap<String, Collection<String>>();
Dann kannst Du die Properties-Klasse misbrauchen um den Inhalt der Datei zu laden; in etwa so:
Code:
InputStream in = new BufferedInputStream(new FileInputStream(file));
{
  Properties newWl = new Properties() {

    @Override
    public synchronized Object put(Object key, Object value) {
      Collection<String> values = fileContent.get(key);
      if (values == null) {
        fileContent.put((String) key, values = new LinkedList<String>());
      }
      values.add((String) value);
      return super.put(key, value);
    }
  };
  newWl.load(in);
}
in.close();

Hilft Dir das weiter?

Ebenius
 

---

Aktives Mitglied
verschiedene keys können aber die gleichen Werte haben.
Ich versuche die Daten "umgekehrt" zuzuordnen.
value key
ABG = ABK\u00DCRZUNG F\u00DCR ABGEORDNETER
ABG = test
ABG = test2

mal schaun, wie weit ich komme..
 

---

Aktives Mitglied
@Ebenius habe Deinen Post erst nach meiner Antwort gelesen

Ich werde versuchen die Properties-Klasse zu "misbrauchen".
Danke!
 

---

Aktives Mitglied
@Ebenius habe Deinen Post erst nach meiner Antwort gelesen

Ich werde versuchen die Properties-Klasse zu "misbrauchen".
Danke!
 

---

Aktives Mitglied
Sorry, leider hab ich's wohl nicht ganz verstanden.
Ich habe Deinen Quellcode eingebaut und dachte mit der neuen Collection sind jetzt "ungeprüfte" Strings in der Struktur für die Properties.

Leider werden die mehrfachen Einträge immer noch überschrieben.

Code:
public void laden(ActionEvent e)
    {
        int returnVal = fc.showOpenDialog(this);
        if(returnVal != 0)
            return;
        file = fc.getSelectedFile();
        try
        {
            final Map<String,Collection<String>> fileContent = new HashMap<String, Collection<String>>();
            InputStream in = new BufferedInputStream(new FileInputStream(file));
            Properties newWl = new Properties()
            {
                @Override 
                public synchronized Object put(Object key, Object value) 
                { 
                  Collection<String> values = fileContent.get(key); 
                  if (values == null) 
                  { 
                    fileContent.put((String) key, values = new LinkedList<String>()); 
                  } 
                  values.add((String) value); 
                  return super.put(key, value); 
                } 
              };
              newWl.load(in); 
      
            in.close();
          
            setWordList(newWl);
          
        }
        catch(IOException ex)
        {
            handleException(ex);
        }
    }
 

Ebenius

Top Contributor
Da hätte ich mich noch ein bisschen klarer ausdrücken müssen. Ich meinte: Vergiss die Properties (und misbrauche die Klasse nur zum Laden). Nutze statt dessen fileContent als Map<String,Collection<String>> als Deinen Datenhalter.

Ebenius
 

---

Aktives Mitglied
Danke!

Ich dachte ich kann den Properties einfach eine andere Struktur statt der Hashtable geben.
Ich benutze die Properties an einigen Stellen, daher würde ich gern die Properties überschreiben bzw. selbst die Struktur bestimmen. Geht das?
 

Ebenius

Top Contributor
Nicht wirklich, nein. Deine datenhaltende Klasse sollte schon die Struktur Deiner Daten abbilden können. Properties sind für String→String-(1→1)-Mapping da. Hier also nicht anwendbar.

Ebenius
 

Landei

Top Contributor
Wenn es wirklich nur einer der Keys ist, kannst du auch mit Trennzeichen mogeln:
AGB=test1|test2|labersuelz
Dann musst du jedesmal beim Auslesen den String splitten und in eine Liste packen, und beim Schreiben aus der Liste wieder einen verketteten String machen. Natürlich kapselt man das am besten durch spezielle Zugriffsmethoden.
Ist unbequem, aber bei einem Key noch vertretbar.
Ansonsten halt auf Ebenius hören...
 

---

Aktives Mitglied
Hallo,

hat seine Zeit gedauert..
Ich habe jetzt die Klasse Properties erweitert. Beim load() kann über den Parameter true oder false bestimmt werden, ob doppelte Einträge überschrieben werden oder nicht.

Der Quelltext ist nicht von mir, ich habe nur Kleinigkeiten wie Zeilenende für einzulesendes file angepasst.
Das Bsp. ist zu finden Copyright (C) 1999-2000 Russell Heywood @ devtools.org

Es werden beim Properities.load die mehrfachen Values zu einem key mit ":" Seperiert hintereinander geschrieben. (siehe Quelltext unten) Zum Auslesen in einzelne key, value Struktur aus den Properties, gibt es die Methode public Enumeration getValues (String key) Die gibt zu jedem key eine Enumeration der values zurück.
Und genau hier habe ich noch ein Problem, ich möchte die einzelnen wertepaare in einer Arraylist speichern. Arraylist, weil ich an einem bestehenden Projekt arbeite und später die ArrayList als Datenstruktur genommen wird.
Also:
Code:
 Map<String,Collection<String>> fileContent = new HashMap<String, Collection<String>>();
       
        Enumeration e = ((MultiProperties) map).keys();
        while (e.hasMoreElements()) {
         String key = (String)e.nextElement();
        
        	 Enumeration dk = ((MultiProperties) map).getValues(key);
             for (int i = 0; dk.hasMoreElements(); i++)
             {
            	 Collection<String> values = fileContent.get(key); 
                 if (values == null) { 
                   fileContent.put((String) key, values = new LinkedList<String>()); 
                 } 
                 values.add((String) dk.nextElement()); 
                 fileContent.put(key, (Collection<String>) dk.nextElement()); 
            	
             }
        }               
        
        mapEntries = new ArrayList();
        mapEntries.addAll( fileContent); // hier ist der Fehler mapEntries erwartet eine Collection

Hier der code von Russell Heywood @ devtools.org MultiProperties
Code:
public class MultiProperties extends Properties
{

public void load (InputStream in, boolean appendOnLoad)
				throws IOException
		{
				String f = StreamConverter.readEntireTextStream(in);
				int len = f.length();
				int loc = 0;

				MultiProperties p = new MultiProperties();

				while (loc != -1 && loc < len) {

						int lineStart = StringTools.findNonWhitespace(f,loc);
						if (lineStart == -1) break; 
						
						if (f.charAt(lineStart) != '#') {
							
							int pos = f.indexOf( "=",lineStart);
														
							String key = f.substring (lineStart,pos).trim();
								//String val = lineStart;//f.substring (f.indexOf( "=",lineStart) + 1,f.indexOf( "\n",lineStart)).trim();
							int posend = f.indexOf( "\n",lineStart);	
							String val;
							if ( posend < 0 ) 								
							   val = f.substring (pos + 1).trim();
							else
							  val = f.substring (pos + 1,posend).trim();
								
								p.appendValue (key, val);
						}

						
						loc = f.indexOf("\n",lineStart);
				}

				if (appendOnLoad)
						mergeFrom(p);
				else
						replaceFrom(p);
		}

public Enumeration getValues (String key)
		{
				Vector rv = new Vector();
				String v = getProperty(key);

				//D.msg ("detail", "Getting multiple values for [" + key + 
				//			 "] from [" + v + "].");

				if (v == null) return rv.elements();

				// parse the string's sep characters
				int lastStart = 0;
				for (int i=0; i <v.length(); ++i) {
						if (v.regionMatches(i,SEP,0,SEP.length())) {
								// found a match
								//D.msg ("detail", "Found an element ("+lastStart+","+i+"): " +
								//			 v.substring (lastStart,i));

								rv.addElement (v.substring (lastStart,i));
								lastStart = i+SEP.length();
								i += SEP.length();
						}
				}

				// do the last one, too
				rv.addElement (v.substring (lastStart,v.length()));
				
				return rv.elements();
		}

Vielen Dank..
 

---

Aktives Mitglied
Also mit
Code:
mapEntries.addAll( fileContent.keySet());
gehts!

Nochmal vielen Dank! Ohne die Bsp. Anregungen wär ich nicht so weit gekommen..
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Unterschied java.util.prefs / java.util.Properties Java Basics - Anfänger-Themen 3
J Java.Util.Properties wrapper class (Review Request) Java Basics - Anfänger-Themen 2
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
BATMAN_2008 Jackson adding additional fields to JSON throws java.util.concurrent.CompletionException: Java Basics - Anfänger-Themen 2
R java.util.Set, CASE_INSENSITIVE_ORDER Java Basics - Anfänger-Themen 6
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
C java.util Timer läuft zu langsam? Java Basics - Anfänger-Themen 1
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
L Zufälliges Objekt aus der ArraylList ohne java.util.Random Java Basics - Anfänger-Themen 56
A Java.util.Arrays Java Basics - Anfänger-Themen 15
F java.util.ArrayList Java Basics - Anfänger-Themen 3
B java.util.Date noch zeitgemäß? Java Basics - Anfänger-Themen 6
B java.util.Date berechnen Java Basics - Anfänger-Themen 11
M java.util.scanner Fehler Java Basics - Anfänger-Themen 5
Meeresgott OOP Richtig mit java.util.Property umgehen Java Basics - Anfänger-Themen 22
N java.util.Random - Zwei Zahlen mit festgesetzter Wahrscheinlichkeit? Java Basics - Anfänger-Themen 15
A Vererbungshierachie und java.util.Date Java Basics - Anfänger-Themen 31
W Erste Schritte import java.util.scanner funktioniert nicht Java Basics - Anfänger-Themen 2
I google java-diff-util - Patch abspeichern Java Basics - Anfänger-Themen 1
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
H Repräsentation von DateTime (Joda) in Java Util Date überführen Java Basics - Anfänger-Themen 3
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7
D java.util.NoSuchElementException: No line found Java Basics - Anfänger-Themen 11
D Lesen aus Datei (java.util.NoSuchElementException) Java Basics - Anfänger-Themen 22
S Compiler-Fehler Scanner java.util NoSuchElementExeption Java Basics - Anfänger-Themen 8
W Methoden Rückgabedatentyp java.util.Map<java.lang.String,? extends ...> Java Basics - Anfänger-Themen 4
B ThreadPoolExecutor - import java.util.concurrent Java Basics - Anfänger-Themen 2
R java.util.Random Java Basics - Anfänger-Themen 8
S Methoden Sortieren: java.util.Arrays.useLegacyMergeSort Java Basics - Anfänger-Themen 4
F java.util.scanner wird übersprungen Java Basics - Anfänger-Themen 9
O java.util.Scanner hängt sich auf Java Basics - Anfänger-Themen 5
E Klassen java.util.ArrayList<E> als Generics Java Basics - Anfänger-Themen 16
D java.util.ResourceBundle - exception Java Basics - Anfänger-Themen 4
M Datentypen java.util.Arrays$ArrayList cannot be cast to [Ljava.lang.String; Java Basics - Anfänger-Themen 11
M java.util.ArrayList to java.sql.Array Java Basics - Anfänger-Themen 4
D java.util.Currency Java Basics - Anfänger-Themen 2
T java.util.Date Java Basics - Anfänger-Themen 5
J java.util.format => mit String? Java Basics - Anfänger-Themen 2
N java.util.Random Java Basics - Anfänger-Themen 6
N verständnisfrage java.util.Calendar Java Basics - Anfänger-Themen 4
Luk10 Java.util.Scanner Java Basics - Anfänger-Themen 11
H ArrayList über java.util.Scanner füllen Java Basics - Anfänger-Themen 5
P ArrayList<E> in package java.util Java Basics - Anfänger-Themen 4
N java.util.Arrays.sort Warum sind Leerzeichen vor alphabetischen Zeichen sortiert? Java Basics - Anfänger-Themen 12
K java.util.ConcurrentModificationException problem in der Logik? Quaxli-Tutorial Java Basics - Anfänger-Themen 9
T import java.util.scanner cannot be resolved Java Basics - Anfänger-Themen 19
D java.util.Currency.getInstance exception mit brit. Pfund Java Basics - Anfänger-Themen 4
M Kann mir bitte jemand "java.util.ArrayList" erklären? Java Basics - Anfänger-Themen 5
V java.util.Stack Java Basics - Anfänger-Themen 9
S BITTE UM HILFE HASHTABLE/import java.util.Hashtable in Ecplipse Java Basics - Anfänger-Themen 12
G DateFormat - Datumsformat java.util.Locale interpretieren Java Basics - Anfänger-Themen 2
E java.util.ConcurrentModificationException Problem Java Basics - Anfänger-Themen 5
F java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
Q java.util.loggging neue datei erstellen Java Basics - Anfänger-Themen 3
L Exception in thread "main" java.util.NoSuchElement Java Basics - Anfänger-Themen 4
hedges Würfelwurf mit java.util.Random ohne 0 Java Basics - Anfänger-Themen 6
W Java.util.Map in Bean wandeln Java Basics - Anfänger-Themen 2
M java.util.Timer und geplante Abarbeitung Java Basics - Anfänger-Themen 2
U java.util.Date to java.sql.Date Java Basics - Anfänger-Themen 2
K Wer kann mir java.util.Hastable erklären. Java Basics - Anfänger-Themen 3
K Probleme mit java.util.hashtable Java Basics - Anfänger-Themen 10
K Zipfile erstellen mit java.util.zip.* Java Basics - Anfänger-Themen 2
J Eclipse und printf und import util.java.scanner; Java Basics - Anfänger-Themen 4
G java.util.LinkedList: Doppelte Elemente vermeiden Java Basics - Anfänger-Themen 5
K Prob mit java.util.regex.matches-String wird nicht erkannt? Java Basics - Anfänger-Themen 9
T Möchte Charwert 23C° mit java.util.Scanner einlesen macht Pr Java Basics - Anfänger-Themen 2
K java.util.Calendar und Objekt Java Basics - Anfänger-Themen 7
M Seltsames java.util.Date Problem Java Basics - Anfänger-Themen 6
M java.util.Scanner kann nicht aufgelöst werden - warum nicht? Java Basics - Anfänger-Themen 4
RaoulDuke java.util.Date parsen Java Basics - Anfänger-Themen 5
M Source Code von java.util.SubList Java Basics - Anfänger-Themen 2
ff java.util.date Java Basics - Anfänger-Themen 2
O reguläre Ausdrücke bei java.util.regex.Pattern Java Basics - Anfänger-Themen 4
K Keine weitere (java.util.)Scanner Eingabemöglichkeit? Java Basics - Anfänger-Themen 5
A wie implementiere ich java.util.Scanner? Java Basics - Anfänger-Themen 12
D Mit java.util.Arrays.sort die negativen Zahlen hinten Java Basics - Anfänger-Themen 4
C java.util.Timer und wait() oder so was Java Basics - Anfänger-Themen 3
G Leere java.util.List erzeugen Java Basics - Anfänger-Themen 2
S java.awt.List vs. java.util.List Java Basics - Anfänger-Themen 2
D dumme Frage! (was heist 'import java.util.*;' ?) Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62

Ähnliche Java Themen

Neue Themen


Oben