Java: StringList & saveToFile Gibt es so etwas

Squicky

Lt. Commander
Registriert
Sep. 2002
Beiträge
1.433
hallo

Gibt es in Java eine Klasse wie "StringList" oder ein "StringArray".
Sie sollte Strings verfalten und ganz wichtig es sollte möglichst einfach sein den Inhalt als Textdatei (.txt) zu speichern.
Dabei sollte jeder String in einer Zeile gespeichert werden.
Wenn es so eine StringList Klasse gebt, dann sollte das ca. so gehen:

----------------------------------------------------
StringList test = new StringList();

test.add ("erste Zeile");
test.add ("zweite Zeile der Textdatei");
test.add ("dritter String für die .txt Datei");

String dateiname = "Datei.txt";
test.saveToFile (dateiname);
----------------------------------------------------

Kennt ihr so etwas in Java?
Danke
 
AW: Java: StringList & saveToFile Gibt es so etwasß

Also als StringList ist mir nichts bekannt, aber die Funktion kannst du auch mit nem Vektor erreichen.
Und SaveToFile ist mir auch nicht bekannt, aber eine Funktion zu basteln, die ein paar Strings per StreamWriter in eine Textdatei schreibt, ist nicht allzu schwer.
 
AW: Java: StringList & saveToFile Gibt es so etwasß

WingX schrieb:
Also als StringList ist mir nichts bekannt, aber die Funktion kannst du auch mit nem Vektor erreichen.
Und SaveToFile ist mir auch nicht bekannt, aber eine Funktion zu basteln, die ein paar Strings per StreamWriter in eine Textdatei schreibt, ist nicht allzu schwer.

Vektor == Array ??? :)
Könntest du mir ein kleines Beispiel zeigen oder mir ein Tutorium empfehlen?
Ich hat mit so etwas wie "StreamWriter" noch nie zu tun?

Danke
 
Ein Vector gehört zur Klasse der Collections. Collections (Sammlungen) erlauben also die Verwaltung von Objekten jeglicher Art. Es gibt da unterschiedliche Collections.

Es gibt z.B. eine Queue-Klasse, welche ein Warteschlangenprinzip realisiert. Da stopfst du also immer Elemente rein und wenn du was rausholst, erhälst du immer das älteste Element (FIFO - first in/first out). Ein Stack beschreibt einen Stapel. Du fügst also Elemente in den Stack ein oder besser, du legst Elemente auf den Stapel. Die Entnahme läuft dann eben so, dass du erst das Element zurückerhälst, welches ganz oben auf dem Stapel liegt, also ist dies ein LIFO (last in / first out).

Dann gibt es eben so Klassen, wie einen Vector. Einen Vektor kannst du dir wie ein dynamisches Array vorstellen. Beim Array hast du in Java ja immer das Problem, dass du bereits zur Instanzierungszeit eine Arraygröße festlegen musst, welche dann auch nicht veränderbar ist. Ein Vector ist dynamisch. Du instanzierst dir also einen Vector und kannst nun Elemente hinzufügen. Du musst dabei nicht darauf achten, wieviele Elemente schon in dem Vector sind. Merkt der Vector, dass er voll wird, so vergrößert er sich automatisch. Natürlich ist auch das alles irgendwie steuerbar, aber für den Anfang reicht es, den Vector einfach selbst seine Arbeit machen zu lassen:

-------
Vector stringVector = new Vector();
stringVector.add("String #1");
stringVector.add("String #2");
...

for( Enumaration e = stringVector.elements(); e.hasMoreElements(); )
{
string actString = (string)e.nextElement();
//actString verarbeiten, z.B. in eine Datei schreiben lassen
}
------

Der Vektor wird also initialisiert und mit Werten bestückt. Dann kann man sich ein Enumeration-Objekt des Vektors von ihm holen. Damit kann man die Elemente nacheinander abfragen. Enumeration besitzt die Methoden hasMoreElements, um zu überprüfen, ob noch Elemente vorhanden sind, welche noch nicht abgefragt wurden und die Metode nextElement, um das nächste Element abzufragen.

Seit Java5 werden Generics von Java unterstützt. Im Beispiel oben siehst du ja, dass ein Vector prinzipiell erstmal Objekte aufnimmt. Steckst du Objekte rein, so weißt du, was drinnen steckt. Wenn du den Vektor aber wieder abfragst, siehst du natürlich nur Objekte, aber z.B. keine Strings. Es muss dann ein expliziter Cast erfolgen, um das Objekt wieder zu dem Objekttypen machen, der es war. Man läuft natürlich immer Gefahr, dass plötzlich ein Objekt drinnen steckt, welches den Cast nicht verträgt.
Man kann deshalb neuerdings während der Initialisierung angeben, was der Vector für Objekttypen akzeptieren soll:

Vector<string> stringVector = new Vector<string>();

Jetzt nimmt der Vector nur noch strings auf und entsprechend kannst du dir den Cast sparen, weil nun ja bekannt ist, welchen Typs das abgegriffene Objekt ist:

for(Enumaration<string> e = stringVector.elements(); e.hasMoreElements();)
{
string actString = e.nextElement();
//actString verarbeiten, z.B. in eine Datei schreiben lassen
}


http://www.galileocomputing.de/openbook/javainsel4/javainsel_11_000.htm#Xxx999380
 
Zuletzt bearbeitet:
und falls du dein Vector "speichern" willst OHNE jeden String einzeln in der Datei zu haben, hat Vector die nette Eigenschaft das Interface Serializable zu implementieren. Damit kannst du dann ganz einfach die komplete Liste auf hdd serializieren und genau so einfach wieder komplet neuladen.


Ich kann dir auch empfehlen die Enumeration durch einen Iterator zu ersetzen, die sind ein wenig Moderner (machen aber genau das gleiche).

zb:

for (Iterator iter = deinVector.iterator(); iter.hasNext();) {
String element = (String ) iter.next();
}


und falls dir die teile komplet auf die eier gehen kannst du auch eine einfach for(int i=...) Schleife benutzen :D
 
Zurück
Oben