Java Daten aus Textdokument auslesen

Nynex

Ensign
Registriert
Jan. 2011
Beiträge
236
Hallo zusammen :)

Ich möchte ein kleines aber feines Programm mit Java Swing entwickeln, womit sich Passwörter für Accounts
einspeisen und wieder auslesen lassen.
Das soll wie folgt ablaufen. Es gibt ein Interface wo in den Feldern "Name", "ID", "Passwort", "Email" usw. Daten eingetragen werden können.
Diese Daten werden in einem .txt Dokument abgespeichert.
z.B: Name = TollesSpiel, ID = Nynex, PW = 12345 usw.

Es gibt eine Suchleiste in der ich dann nach einem Namen suchen kann. Wenn ich dann "TollesSpiel" eingebe, sollen mir die dazu gehörigen Informationen ausgespuckt werden.
Ich habe es schon so weit geschafft, dass die Daten alle hintereinander in einem Textdokument gespeichert werden. Und ich kann mir das auch wieder ausgeben lassen. Allerdings halt nur so. "TollesSpielNynex12345". Ich hätte es gerne geordneter und wollte mal fragen, wie ihr daran gehen würdet? Mir schweben da zwar ein paar Lösungen im Kopf herum, jedoch denke ich das es einfachere Wege gibt.

Schönen Abend noch :)
- Daniel
 
Wenn du die Daten alle jeweils in eine neue Zeile schreiben lassen würdest, könntest du zumindestens mit einem RandomAccessFile (einfach mal googlen nach: java api randomaccessfile) zeilenweise auslesen lassen und z.b. in eine ArrayList abspeichern.
Vllt hilft das ein wenig weiter.
 
Hier wäre eine Datenbank hilfreich...

Alternativ eine HashMap, um gleich die Suche zu erschlagen. Lässt sich mittels Serialisierung auch direkt auf die Platte bringen und wieder einlesen. Man hat so halt alle Daten immer im Speicher, aber das dürfte wohl kein Problem sein.

Wenn Du zum Üben aber auf dem Ansatz mit der Textdatei bestehst, dann müssen die Daten natürlich so abgespeichert werden, dass sie auch strukturiert wieder eingelesen werden können. Bei "TollesSpielNynex12345" weiß man nicht, wo der Name aufhört und die Id beginnt. Verwende einen Marker, um die Daten zu trennen. Z.B. ~~ oder irgendetwas anderes, was ansonsten nicht in der Eingabe auftaucht. TollesSpiel~~Nynex~~12345 wäre dann eine Zeile in der Textdatei.
 
vll einfach die toString-Methode anpassen (sofern diese nicht schon angepasst wurde - also Standard ist)
 
Trenne die unterschiedlichen Felder doch einfach mit einem ; oder | wenn du es in die Textdatei schreibst. Dann kannst du beim Einlesen mit der Methode split("\\;") die einzelnen Spalten aufteilen.

String textZeileAusDatei = //inputstream bla...
String[] spalte = textZeileAusDatei.split("\\;");

Mit spalte[0] greifst du dann auf die erste Spalte zu, usw.

Lies am besten zu split() einfach mal die Java-API, dann wird das denke ich auch klar.

EDIT: In was du dann deine eingelesenen Objekte speicherst ist dir überlassen. Zum Suchen haben ja meine Vorrender auch schon was geschrieben.
 
Nynex schrieb:
Hallo zusammen :)

Ich möchte ein kleines aber feines Programm mit Java Swing entwickeln, womit sich Passwörter für Accounts
einspeisen und wieder auslesen lassen.
Das soll wie folgt ablaufen. Es gibt ein Interface wo in den Feldern "Name", "ID", "Passwort", "Email" usw. Daten eingetragen werden können.
Diese Daten werden in einem .txt Dokument abgespeichert.
z.B: Name = TollesSpiel, ID = Nynex, PW = 12345 usw.

Es gibt eine Suchleiste in der ich dann nach einem Namen suchen kann. Wenn ich dann "TollesSpiel" eingebe, sollen mir die dazu gehörigen Informationen ausgespuckt werden.
Ich habe es schon so weit geschafft, dass die Daten alle hintereinander in einem Textdokument gespeichert werden. Und ich kann mir das auch wieder ausgeben lassen. Allerdings halt nur so. "TollesSpielNynex12345". Ich hätte es gerne geordneter und wollte mal fragen, wie ihr daran gehen würdet? Mir schweben da zwar ein paar Lösungen im Kopf herum, jedoch denke ich das es einfachere Wege gibt.

Schönen Abend noch :)
- Daniel

Ich bin zwar kein hauptberuflicher Programmierer, aber ich würde mit einer Properties-Datei arbeiten und die Passwörter noch verschlüsseln.
 
Für strukturierte Datenhaltung bietet sich natürlich auch eine XML Struktur an. Die kann man auch schön serialisieren. Und verschlüsseln.
 
Wie wäre es mit SQLite? Die Daten werden ebenfalls in einer Datei abgespeichert, läuft ohne eigenen Server und sollte auch nicht allzu kompliziert sein. Dafür musst du wohl nur einen JDBC Treiber installieren und kannst los legen: http://www.javabeginners.de/Datenbanken/SQLite-Datenbank.php (ich habe SQLite bisher nur mit C angesprochen, da war es recht einfach. Java wird auch nicht schwerer sein. :) )
 
Ich hätte auch SQLite vorgeschlagen. Alternativ kannst du dir auch mal Googles ProtocolBuffers ansehen. Die sind exzellent dokumentiert und man findet sich schnell rein.
 
Ich glaube ehrlich gesagt nicht, dass die Datenmengen so groß werden, dass man direkt eine Datenbank verwenden sollte. Eine Datei wird hier ausreichen.


Die Daten würde ich in Form von Value Objects zur Laufzeit vorhalten. Value Objects (VOs) sind im Prinzip instanziierte Klasse, die kaum mehr mehr als Attribute und dazugehörige Setter und Getter beinhalten. Stichworte: Klassen, Objekte und Datenkapselung: Attribute, Getter-Methoden, Setter-Methoden, Sichtbarkeitsmodifizierer

Die VOs würde ich dann in eine Collection packen. Stichworte: ArrayList, HashMap, eventuell auch für die geplante Suche interessant: Comparable, Comparator

Das hat den Vorteil, dass man über extrem wenig Code diese mit einem Schlag in eine Datei schreiben und wieder laden kann. Stichworte: Serializable, ObjectOutputStream, FileOutputStream, ObjectInputStream, FileInputStream.
 
Zuletzt bearbeitet:
Mit einer Datenbank hat man halt sehr leicht ausgefeilte Möglichkeiten der Suche und Filterung und sogar die Verschlüsselung schon mit drin. Muss ja kein RDBMS sein. Für so ein kleines Programm würde ich mir aber auch ganz sicher keine native SQL-Datenbank ans Bein binden.

Aber der TE scheint ohnehin nicht in diese Richtung zu schielen.
 
Das Datenbank-Feature kann man sich für Version 2.0 des Passwortverwalters vormerken. Dann hat man auch einen dreifachen Lerneffekt:
Ersten sieht man, was man früher für einen Schrott zusammenprogrammiert hat.
Zweiten erkennt man, wie wichtig eine Architektur und insbesondere die Komponenten und ihre Schnittstellen sind und
drittens lernt man was über Datenbanken.

Bis dahin hat man aber meist mit noch ganz anderen typischen Anfängerproblemen zu tun:
Klassen und Objekte programmieren, Algorithmen und Datenstrukturen, Vererbung, etwas Serialisierung bzw. Datei-I/O, Fenstergedöns und Millionen Syntaxfehler (If statt if, Semikolon vergessen, new vergessen usw.). ;)
 
Zurück
Oben