Speichern einer verketteten Liste

halli hallo…

ich hab da mal ne frage…
bin dabei mich n bisschen weiter mit java zu beschäftigen und hab mir vorgenommen aus einer verketteten liste, die wir mal in einem uniseminar basteln sollten, ein kleines dvd-film-datenbank-prog für mich zu programmieren.
soweit klappt alles ganz gut, hab mich gut in swing reingefunden, aber nun steh ich vor dem problem meine verkettete liste zu speichern…
bisher hab ich nur so mit speichern von strings in txt dateien beschäftigt…
nun hab ich gelesen, dass man in .dat files objekte speichert…
bezogen auf meine liste verstehe ich nicht, welches objekt ich denn speichern soll.
Also mir geht es jetzt nicht darum, wie genau ich Dinge in ein File speichere, sondern mehr darum die Objekt blokade in meinem Kopf zu lösen. Den Rest kann man ja nachlesen…
Ich weiß, dass als ich damals danach gesucht habe wie Listen überhaupt funktionieren auch ein beispiel gesehen hab, wo ein objekt der klasse Liste erzeugt wurde… Wird dieses Objekt gespeichert??
Oder speichere ich „neuerKnoten“? Ist doch auch ein Objekt der klasse Knoten, aber dann würde ich nur einen Knoten speichern und nicht alle… oder mit einer Schleife verwirklichen?
Ich habe hier echt eine kleine Blockade… hoffe mir kann jemand helfen.

Vielen Dank schon mal im voraus!!!
Grüße
Franz

p.s. ich hab weiter unten schon gesehen, dass es dieses Thema schon mal gab, aber irgendwie konnte das mir nicht helfen.
(nur damit sich keiner wegen doppelpost aufregt)
grüße!

public class liste
{

private static Knoten erster = null;
private static Knoten letzter = null;

public static void addKnoten( String movie, String genre, String actors, int year, int time, int rating, int dvd)
{

Knoten neuerKnoten = new Knoten(movie, genre, actors, year, time, rating, dvd);

if (letzter != null)
{
letzter.setNext(neuerKnoten);
}
else erster = neuerKnoten;

count++;
letzter = neuerKnoten;
neuerKnoten.setNext(null);
}

public void druckeListe()
{

}

public static void suche(String search)
{

}

}

class Knoten
{
String movieK;
String genreK;
String actorsK;
int yearK;
int timeK;
int DVDnrK;
int ratingK;
Knoten next;

public Knoten (String mK, String gK, String aK, int yK, int tK, int rK, int dvd)
{
movieK = mK;
genreK = gK;
actorsK = aK;
yearK = yK;
timeK = tK;
ratingK = rK;
DVDnrK = dvd;
}

public void setNext(Knoten neuerKnoten)
{
next = neuerKnoten;
}
}

Hallo Franz,

nun steh ich vor dem problem meine verkettete liste zu speichern…

Das Thema war vor nicht allzu langer Zeit schon mal dran:
http://www.wer-weiss-was.de/cgi-bin/forum/showarchiv…

Um große Datenmengen performant zu speichern wirst Du mit der Serializable-Schnittstelle und einem Speichern in Dateien alleine nicht weit kommen. Da muss eine Datenbank ran.

Wenn Du dabei kein JDBC verwenden willst, such Dir eine Persistenzlösung bei der Objekte transparent in der Datenbank gespeichert werden, z.B. Hibernate.

Gruß,
-Andreas.

Hallo Andreas,

danke für deine Antwort. Hatte das Thema schon mal durchgeguckt, aber nicht so richtig verstanden, deshalb sorry, dass ich extra nochma n neues Thema aufgemacht hab.
Hab mir das jetzt also nochmal genau angeschaut und war heut überglücklich, als ich endlich etwas speichern konnte.
ich speichere nun also knoten für knoten in eine datei und lade auch knoten für knoten wieder rein und genau da hab ich noch ein kleines problemchen, wo ich nicht weiter komme…
die methode im anhang bringt ne EOFException. ich geh mal davon aus, dass meine bedingung in der whileschleife nicht richtig ist. wie kann ich also abfragen, ob das ende einer datei erreicht ist oder nicht?

hier die methode:

public static void laden() throws IOException, ClassNotFoundException
{
Knoten ladeKnoten;
letzter = null;
FileInputStream fis = new FileInputStream („DATEI.txt“);
ObjectInputStream ois = new ObjectInputStream (fis);

while( ois.readObject()!= null) // !!!
{
ladeKnoten = (Knoten) ois.readObject();

if (letzter != null)
{
letzter.setNext(ladeKnoten);
}
else erster = ladeKnoten;
letzter = ladeKnoten;
ladeKnoten.setNext(null);

}

ois.close();
MovieDB.listenModel.clear();
druckeListe();

}

daaankee für die mühe :wink:
franz

den ganzen tag versuch ichs und kriegs nicht hin und 20 minuten nachdem ich hier die frage stelle läufts.

so siehts aus…

public static void laden() throws IOException, ClassNotFoundException
{
try
{
Knoten ladeKnoten;

letzter = null;
FileInputStream fis = new FileInputStream („DATEI.txt“);
ObjectInputStream ois = new ObjectInputStream (fis);

try
{

while( true)
{
ladeKnoten = (Knoten) ois.readObject();

if (letzter != null)
{
letzter.setNext(ladeKnoten);
}
else erster = ladeKnoten;

letzter = ladeKnoten;
ladeKnoten.setNext(null);
}

}
catch (EOFException e)
{
ois.close();
}

}
catch (Exception e) {}

}