Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » daten in datei speichern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.11.2006, 20:50 Uhr
cmos



Hallo,
eine kurze Frage.

Ich habe ein Objekt Person das Name,.. usw auf nimmt.
Diese werden in einer HashMap abgespeichert, der Schlüssel
zum jeweilgen Datensatz wird per Random erzeugt.

String key = Integer.toString(r.nextInt());
NewMap.put(key,NewPerson);

Die Schlüssel werden in einer verketteten Liste (LinkedList)
gespeichert.
Ich hab nun keine klare Vorstellung darüber, wie ich nun diese Datensätze in einer Datei
abseichere.
Von C ist mir noch etwas eignefallen.
Wenn man bspw. Strukturen abgespeichert hat, konnte man diese
doch an fwrite mit der Größe übergeben und es wurde die Struktur
abgespeichert.
So ähnlich habe ich es mir in Java gedacht. Aber ich müsste doch eigentlich die
Keys auch abspeichern, ode ? Damit ich den Datensatz wiederfinden kann.

Grüße,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.11.2006, 21:11 Uhr
KaraHead



Naja, wenn dir die Struktur der abgespeicherten Datei egal ist, dann könntest du doch einfach die ganze HashMap speichern.


C++:
//map speichern
FileOutputStream fos = new FileOutputStream("t.tmp");
        ObjectOutputStream oos = new ObjectOutputStream(fos);

        oos.writeObject(NewMap);

        oos.close();

//map lesen
FileInputStream fis = new FileInputStream("t.tmp");
        ObjectInputStream ois = new ObjectInputStream(fis);

        HashMap NewNewMap = (HashMap) ois.readObject();

        ois.close();



Theorethisch könntest du noch die LinkedList mit den Schlüsseln speichern, was aber nicht nötig ist, da in der HashMap die Schlüssel/Keys schon enthalten sind.

Das wäre so ziehmlich die einfachste und unkomplizierteste Methode deine Daten Persistent zu machen.

P.S. Warum speicherst du die Keys in einer separaten LinkedList, wenn du an die auch durch die HasMap rankommst. HashMap#keySet().

Gruß KaraHead
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.11.2006, 22:17 Uhr
cmos



Hallo und danke für die schnelle Antwort.
Ich möchte aber nicht die HashMap speichern sondern
die Objekte vom Typ Person die in der HashMap abgelegt sind.
Ich hab mir gedacht, ich könnte einen Vector erzeugen. Ich traversiere
durch die hashmap und lege die objekte im vektor ab.
und von dem schreibe ich dann in eine datei.
Klingt vielleicht doppeltgemoppelt. vielleicht gehts, das ich direkt beim durchlauf
durch die hashmap die objekte in eine Dateispeichern kann.
die datei enthält allerdings was komisches.


¬í {sr java.io.NotSerializableException(Vx ç†5 xr java.io.ObjectStreamExceptiondÃäk9ûß
usw. das ist nur ein Auszug aus der Datei.



C++:
            Vector Daten = new Vector();
              
            Collection<Person> CollPers = new LinkedList <Person>();
            CollPers = NewMap.values();
                            
            for (Iterator i = CollPers.iterator(); i.hasNext(); )
            {
                Daten.add((Person)i.next());
            }
            
            //Vektor in Datei speichern
            FileOutputStream FileOut = new FileOutputStream(path);
            ObjectOutputStream ObjectOut = new ObjectOutputStream(FileOut);
            for(int i = 0; i < Daten.size(); i++)
            {    
                ObjectOut.writeObject((Person)Daten.get(i));
            }
            ObjectOut.close();



Grüße
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.11.2006, 22:47 Uhr
Blubber2063



Ich weise darauf hin das dies nur eine begrenz gute Idee ist, denn mit einem Object Stream werden die Klassen serialisiert, d.h. nach Änderung der Klasse kann man sie nicht mehr so einfach laden, ich empfehle doch sehr die Daten einer Klasse einzeln Binär ins File zu schreiben und sie dann bei so einfachen Strukturen wie Arrays oder Listen hintereinander weg in der Datei abzulegen, bei Strukturen wie Bäumen wirds schon komplizierter, aber das mit dem Serialisieren ist halt problematisch und kann im Zweifelsfall auch dazu führen, dass es unter Umständen mit einer neueren Java Version nicht mehr ladbar ist.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.11.2006, 17:20 Uhr
KaraHead



Also, natürlich ist das ein Problem, welches Blubber geschildert hat. Dennoch gehe ich davon aus, dass cmos den einfachsten und schnellsten Weg sucht um seine Objekte zu speichern. Ich schätze cmos will nur ein bischen üben?

@cmos
Ich hab vergessen zu schreiben, dass deine Klasse Person noch das Interface Serializable implementieren muss. Das ist lediglich ein Markeinterface und signalisiert nur, dass die Klasse Person speicherbar ist.

Andere Möglichkeiten wären, die Objekte in Property-Files zu speichern oder halt im XML-Format.
Wird halt dementsprechend komplizierter.

Gruß KaraHead
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.11.2006, 22:28 Uhr
cmos



Hallo,

@KareHead: richtig, zum üben.
Ich habe es nun so gelöst.
Der Klasse die die Datensätze enthält übergebe ich einen BufferedWrite.
In die erste Zeile der Datei speichere ich die Anzahl der Einträge der HashMap.
Danach folgen einfach die Datensätze.
Also, ganz simpel gelöst

Grüße
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: