Ich möchte eine Telefonliste aus einer Textdatei auslesen...
Code:
Telefonnummer;Name;
und in eine Java Liste einfügen.
Die Oberfläche des Dialogs ist in SWING mit NetBeansIDE geschrieben.
Leider fehlt mir momentan jeglicher Ansatz, wie ich die einzelnen Zeilen auslesen soll und dann in die Liste einfügen muss...
Die markierte Zeile möchte ich dann letztendlich mit
[JAVA=90]new WahlDialog().extern = String.valueOf(jList.getSelectedValue());[/code]
an einen externen String übergeben. (Falls das so klappen sollte...)
Könnte mir hierfür eventuell jemand einen geeigneten Lösungsansatz bieten?
Sowas ähnliches hab ich mir bereits gedacht, aber es stellt sich mir noch die Frage, wie ich den String nur nach jedem 2. ";" splitten kann. Denn ich hab ja jeweils
Nummer;Name;
Nummer;Name;
Nummer;Name;
etc
Kann ich das dann einfach mit ner Schleife auslesen und dann in der Liste wieder zusammenbauen?
Oder muss ich die Namen in ne extra Zeile über oder unter die Nummer tun und dann splitten?
Gawain hat gesagt.:
Beschäftige dich mit InputStreams: InputStream (Java Platform SE 6) (für dich wird FileInputStream interessant sein)
Danke für den Tipp. Aber mit dem Stream (InputStreamReader und OutputStreamWriter) beschäftige ich mich schon eine ganze Weile.
Das Programm, für welches das Telefonbuch gedacht ist, greift über einen Socket auf ein Manager-Interface einer Telefonanlage zu und übergibt dieser einen Call-Orginate-Befehl (extern anrufen und nach intern durchstellen).
Sprich ich lese jede Line aus und splitte beim ";".
Um zu sehen, was alles in dem "incoming"-array steht, hab ich das auf ne CMD umgeleitet.
Was mich grad tierisch verwundert, dass er mir zwar genau das aus der txt raus holt, was drin steht, aber NUR die LETZTE Zeile! Überschreibt er die anderen Zeilen? Und wenn ja, wieso?
wie soll man normalen Java-Code erklären,
deine Schleife Zeile 4-6 speichert eben jede neue Zeile in derselben Variable incoming, logisch dass da am Ende nur die letzte Zeile da ist,
wo soll der Rest denn sein? auf magische Weise auch in incoming irgendwo mit drin, hintereinander geschrieben?
oder vermutest du dass var1 als Vorstufe alles aufnimmt? dann wäre deine Abbruchbedingung (null) ja nie erfüllt
wie soll man normalen Java-Code erklären,
deine Schleife Zeile 4-6 speichert eben jede neue Zeile in derselben Variable incoming, logisch dass da am Ende nur die letzte Zeile da ist,
wo soll der Rest denn sein? auf magische Weise auch in incoming irgendwo mit drin, hintereinander geschrieben?
oder vermutest du dass var1 als Vorstufe alles aufnimmt? dann wäre deine Abbruchbedingung (null) ja nie erfüllt
Jetzt steh ich ehrlich gesagt auf m Schlauch.
Die Variable "incoming" ist ein String-Array. Keine normale String-Variable.
Deswegen ging ich bisher davon aus, dass er mit dem input.split(";") immer einen Wert aus der txt-datei ausliest bis zum brake ( ; ) und danach in einen neuen Array-Platz schreibt. Oder verkopf ich mich da gerade in eine falsche Richtung?
Ich bin grad am grübeln was passiert, wenn ich
[JAVA=4] while ((var1 = input.readLine()) != null) {[/code]
folgendermaßen abändere
[JAVA=4] while ((var1 = var1 + input.readLine()) != null) {[/code]
Dann müsste er ja eigentlich erst ALLE Zeilen hintereinander an die var1 anhängen und wenn input.readLine() == null, dann abbrechen.
Und als nächstes dann einfach den Split extra durchführen.
Sollte ich vielleicht eher in die Richtung denken?
Mein Chef meinte zu mir, dass ich mir die Überlegung machen könnte den split in einen Vector zu speichern oder in ein 2D-String-Array, aber ehrlich gesagt hab ich davon noch 0 Ahnung.
> Oder verkopf ich mich da gerade in eine falsche Richtung?
das split splittet den String, die aktuelle Zeile,
auf keine ersichtliche Weise hat das was mit den vorherigen Zeilen zu tun, es wird sogar ein komplett neues Array-Objekt angelegt
zu Vektoren und Co. kannst du dir Ahnung anlesen, ist ein typisches Vorgehen in so einer Situation,
dass du beim Zusammenfügen von var1 nie null erhälst habe ich schon erwähnt, daneben gibts andere Probleme,
etwa fällt der Zeilenumbruch weg, Wörter werden zusammengeklebt
> Oder verkopf ich mich da gerade in eine falsche Richtung?
das split splittet den String, die aktuelle Zeile,
auf keine ersichtliche Weise hat das was mit den vorherigen Zeilen zu tun, es wird sogar ein komplett neues Array-Objekt angelegt
hab mittlerweile eine Lösung für mein Problem gefunden:
Ich hab mal die ganze Splitterei und Vektoren auf die Seite gelegt und mich der Methoden des Listenelements selbst angenommen und siehe da es funktioniert.
Hier ein kleiner Lösungsansatz für Leute mit dem selben Problem:
(Wahldialog)
Java:
Buch tele =newBuch(this,true);
tele.setVisible(true);this.jTextExtern.setText( tele.reineZahl());// return aus reineZahl direkt an Textzeile übergeben und einsetzen
(Telefonbuchdialog)
Java:
privatevoidformWindowOpened(java.awt.event.WindowEvent evt){try{BufferedReader input =newBufferedReader(newFileReader("C:/Users/%USER%/Desktop/telefon.txt"));DefaultListModel model =newDefaultListModel();// neues model für Liste erstellenString var1 =null;while((var1 = input.readLine())!=null){// model zeilenweise mit Text aus Textdatei befüllen
model.add(model.getSize(), var1);// Text an letzter Stelle anhängen}
jListTelefonbuch.setModel(model);// model der Liste zuweisen}catch(Exception ex){
ex.printStackTrace();}}publicBuch(java.awt.Frame parent,boolean modal){super(parent, modal);initComponents();}
Man sollte allerdings beachten, dass man den Telefonbuchdialog auch in einem JDialog schreibt und nicht im JFrame, da sonst der Aufruf des Dialoges nicht modal ist.
Das einzige Problem, welches noch besteht, ist den Pfad für die txt-datei "relativ" vom Programmpfad abzugeben. Aber ich denke da werde ich bei Google fündig.