Problem mit dynamischer Auslesung einer Textdatei [Java]


Xemper

Grünschnabel
Hallo Community,

ich habe mir ein Adressbuch in Java vorgenommen und die Variablen aus der Textdatei einzulesen ist kein Problem, allerdings hapert es dann an dem dynamischen Einfügen.
Ich habe ein Menü, eine Adressliste, eine Kontaktinformation und eine Seite zum Hinzufügen von Kontakten.
Beim Hinzufügen werden die Werte der Textfelder ausgelesen und in einer bestimmten Reihenfolege aufgelistet, separiert durch Semikolons.
Nun habe ich ein Problem damit es so auslesen zu lassen, dass man mit einer Vorlage für die Kontaktinformation alle Kontakte anzeigen zu lassen.

Mein Code:
PHP:
package Adressbuch;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class main {
	
	static FileWriter writer;
	static File file;
	static File fi = new File("");
	
	public static void main(String[] args){
		file = new File(fi.getAbsolutePath()+"\\adressen.txt");
		System.out.println(fi.getAbsolutePath());
		//Menüfenster
		final JFrame adden = new JFrame();
		final JFrame menue = new JFrame();
		final JFrame adressliste = new JFrame();
		final JFrame kontakt = new JFrame();
		final JFrame kontakt2 = new JFrame();
		
		menue.setTitle("Adressbuch-Menü");
		menue.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		menue.setLayout(null);
		menue.setSize(400,600);
		menue.setLocation(50,50);
		menue.setResizable(false);
		JLabel l1 = new JLabel("Mein Adressbuch");
		JButton b1 = new JButton("Adressliste");
		JButton b2 = new JButton("Neuer Eintrag");
//					  x   y  h  l
		l1.setBounds(138,20,200,40);
//		 			 x   y    l    h		
		b1.setBounds(90,100,200,40);
		b2.setBounds(90,200,200,40);
		menue.add(b1);
		menue.add(b2);
		menue.add(l1);
		menue.setVisible(true);
		b1.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent ae) {
				menue.setVisible(false);
				adressliste.setVisible(true);
			}});
		b2.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent ae) {
				menue.setVisible(false);
				adden.setVisible(true);
			}});
		//Adressbuch
		adressliste.setTitle("Adressbuch");
		adressliste.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		adressliste.setLayout(null);
		adressliste.setSize(400,600);
		adressliste.setLocation(50,50);
		adressliste.setResizable(false);
		JLabel l2 = new JLabel("Mein Adressbuch");
		JButton b3 = new JButton("Menü");
		JButton b6 = new JButton();
		JButton b10 = new JButton();
		JLabel lv = new JLabel();
		JLabel ln = new JLabel();
		JLabel ls = new JLabel();
		JLabel lh = new JLabel();
		JLabel lp = new JLabel();
		JLabel lw = new JLabel();
		JLabel ltn = new JLabel();
		JLabel lhn = new JLabel();
		JLabel lgt = new JLabel();
		
		JLabel lv2 = new JLabel();
		JLabel ln2 = new JLabel();
		JLabel ls2 = new JLabel();
		JLabel lh2 = new JLabel();
		JLabel lp2 = new JLabel();
		JLabel lw2 = new JLabel();
		JLabel ltn2 = new JLabel();
		JLabel lhn2 = new JLabel();
		JLabel lgt2 = new JLabel();

		BufferedReader br = null;
	        try {
	        	br = new BufferedReader(new FileReader(file));
	            String line = null;
	            if((line = br.readLine()).startsWith("1")) {   
	                String[] parts = line.split(";");
	                String v = parts[0];     
	                String n = parts[1];
	                String s = parts[2];
	                String h = parts[3];
	                String p = parts[4];
	                String w = parts[5];
	                String tn = parts[6];
	                String hn = parts[7];
	                String gt = parts[8];
	                v = v.substring(1);
	                b6.setText(v+" "+n);
	                b6.setBounds(1,60,200,40);
	                adressliste.add(b6);
	        		kontakt.setTitle(v+n);
	        		lv.setText(v);
	        		ln.setText(n);
	        		ls.setText(s);
	        		lh.setText(h);
	        		lp.setText(p);
	        		lw.setText(w);
	        		ltn.setText(tn);
	        		lhn.setText(hn);
	        		lgt.setText(gt);
	        		
	        		kontakt.add(lv);
	        		kontakt.add(ln);
	        		kontakt.add(ls);
	        		kontakt.add(lh);
	        		kontakt.add(lp);
	        		kontakt.add(lw);
	        		kontakt.add(ltn);
	        		kontakt.add(lhn);
	        		kontakt.add(lgt);
	            }
	            if((line = br.readLine()).startsWith("2")) {   
	                String[] parts = line.split(";");
	                String v2 = parts[0];     
	                String n2 = parts[1];
	                String s2 = parts[2];
	                String h2 = parts[3];
	                String p2 = parts[4];
	                String w2 = parts[5];
	                String tn2 = parts[6];
	                String hn2 = parts[7];
	                String gt2 = parts[8];
	                v2 = v2.substring(1);
	                b10.setText(v2+" "+n2);
	                b10.setBounds(1,100,200,40);
	                adressliste.add(b10);
	        		kontakt2.setTitle(v2+" "+n2);
	        		lv2.setText(v2);
	        		ln2.setText(n2);
	        		ls2.setText(s2);
	        		lh2.setText(h2);
	        		lp2.setText(p2);
	        		lw2.setText(w2);
	        		ltn2.setText(tn2);
	        		lhn2.setText(hn2);
	        		lgt2.setText(gt2);

	        		kontakt2.add(lv2);
	        		kontakt2.add(ln2);
	        		kontakt2.add(ls2);
	        		kontakt2.add(lh2);
	        		kontakt2.add(lp2);
	        		kontakt2.add(lw2);
	        		kontakt2.add(ltn2);
	        		kontakt2.add(lhn2);
	        		kontakt2.add(lgt2);
	            }
	            
	        } catch(FileNotFoundException e) {
	            e.printStackTrace();
	        } catch(IOException e) {
	            e.printStackTrace();
	        } finally {
	            if(br != null) {
	                try {
	                    br.close();
	                } catch(IOException e) {
	                    e.printStackTrace();
	                }
	            }
	        }
		
	       
		l2.setBounds(138,20,200,40);
		lv.setBounds(1,60,200,40);
		ln.setBounds(200,60,195,40);
		ls.setBounds(1,90,200,40);
		lh.setBounds(200,90,195,40);
		lp.setBounds(1,120,200,40);
		lw.setBounds(200,120,195,40);
		ltn.setBounds(1,150,200,40);
		lhn.setBounds(200,150,195,40);
		lgt.setBounds(1,180,395,40);
		
		lv2.setBounds(1,60,200,40);
		ln2.setBounds(200,60,195,40);
		ls2.setBounds(1,90,200,40);
		lh2.setBounds(200,90,195,40);
		lp2.setBounds(1,120,200,40);
		lw2.setBounds(200,120,195,40);
		ltn2.setBounds(1,150,200,40);
		lhn2.setBounds(200,150,195,40);
		lgt2.setBounds(1,180,395,40);
		
		b3.setBounds(1,1,100,40);
		adressliste.add(l2);
		adressliste.add(b3);
		adressliste.setVisible(false);

		
		b6.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent ae) {
				adressliste.setVisible(false);
				kontakt.setVisible(true);
				
				
				
			}});
		b10.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent ae) {
				adressliste.setVisible(false);
				kontakt2.setVisible(true);
				
				
				
			}});
		b3.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent ae) {
				adressliste.setVisible(false);
				menue.setVisible(true);
			}});
		//Hinzufügen
		adden.setTitle("Adressbucheintrag hinzufügen");
		adden.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		adden.setLayout(null);
		adden.setSize(400,600);
		adden.setLocation(50,50);
		adden.setResizable(false);
		JLabel l3 = new JLabel("Neuen Kontakt hinzufügen");
		JButton b4 = new JButton("Menü");
		JButton b5 = new JButton("Hinzufügen");
		
		JLabel l4 = new JLabel("Name");
		JLabel l5 = new JLabel("Vorname");
		JLabel l6 = new JLabel("Straße");
		JLabel l7 = new JLabel("Hausnummer");
		JLabel l8 = new JLabel("PLZ");
		JLabel l9 = new JLabel("Wohnort");
		JLabel l10 = new JLabel("Telefonnummer");
		JLabel l11 = new JLabel("Handynummer");
		JLabel l12 = new JLabel("Geburtstag");
		
		final JFormattedTextField tf1 = new JFormattedTextField();
		final JFormattedTextField tf2 = new JFormattedTextField();
		final JFormattedTextField tf3 = new JFormattedTextField();
		final JFormattedTextField tf4 = new JFormattedTextField();
		final JFormattedTextField tf5 = new JFormattedTextField();
		final JFormattedTextField tf6 = new JFormattedTextField();
		final JFormattedTextField tf7 = new JFormattedTextField();
		final JFormattedTextField tf8 = new JFormattedTextField();
		final JFormattedTextField tf9 = new JFormattedTextField("DD.MM.JJJJ");
		
		l3.setBounds(125,20,200,40);
		b4.setBounds(1,1,100,40);
		l4.setBounds(1,60,200,40);
		l5.setBounds(200,60,200,40);
		tf1.setBounds(1,90,200,20);
		tf2.setBounds(200,90,195,20);
		l6.setBounds(1,120,200,40);
		l7.setBounds(200,120,200,40);
		tf3.setBounds(1,150,200,20);
		tf4.setBounds(200,150,195,20);
		l8.setBounds(1,180,200,40);
		l9.setBounds(200,180,200,40);
		tf5.setBounds(1,210,200,20);
		tf6.setBounds(200,210,195,20);
		l10.setBounds(1,240,200,40);
		l11.setBounds(200,240,200,40);
		tf7.setBounds(1,270,200,20);
		tf8.setBounds(200,270,195,20);
		l12.setBounds(1,300,200,40);
		tf9.setBounds(1,330,395,20);
		
		b5.setBounds(100,400,200,40);
		
		adden.add(l3);
		adden.add(b4);
		adden.add(l4);
		adden.add(l5);
		adden.add(tf1);
		adden.add(tf2);
		adden.add(l6);
		adden.add(l7);
		adden.add(tf3);
		adden.add(tf4);
		adden.add(l8);
		adden.add(l9);
		adden.add(tf5);
		adden.add(tf6);
		adden.add(l10);
		adden.add(l11);
		adden.add(tf7);
		adden.add(tf8);
		adden.add(b5);
		adden.add(l12);
		adden.add(tf9);
		adden.setVisible(false);
		
		
		b4.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent ae) {
				adden.setVisible(false);
				menue.setVisible(true);
				  
			}});
		
		b5.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent ae) {
				
				String nachname = tf1.getText();
				String vorname = tf2.getText();
				String straße = tf3.getText();
				String hausnummer = tf4.getText();
				String plz = tf5.getText();
				String wohnort = tf6.getText();
				String telefonnummer = tf7.getText();
				String handynummer = tf8.getText();
				String geburtstag = tf9.getText();
				int count = 0;
				
				try {
				      BufferedReader in = new BufferedReader(new FileReader(file));
				      while ( in.readLine() != null ) {
				        count++;
				      }
				      System.out.println("Anzahl: " + count);
				}
			    catch (Exception ex) {
			      ex.printStackTrace();
			    }

				try
				{
					count = count+1;
					writer = new FileWriter(file ,true);
					writer.write(count+nachname+";"+vorname+";"+straße+";"+hausnummer+";"+plz+";"+wohnort+";"+telefonnummer+";"+handynummer+";"+geburtstag);
					writer.write(System.getProperty("line.separator"));
					writer.flush();
					writer.close();
				}
				catch( IOException e )
				{
					e.printStackTrace();
				}

				
				
				
				tf1.setText("");
				tf2.setText("");
				tf3.setText("");
				tf4.setText("");
				tf5.setText("");
				tf6.setText("");
				tf7.setText("");
				tf8.setText("");
				tf9.setText("DD.MM.JJJJ");
				
			}});
		
		
		
		//Kontaktsheet 1 
		kontakt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		kontakt.setLayout(null);
		kontakt.setSize(400,600);
		kontakt.setLocation(50,50);
		kontakt.setResizable(false);
		kontakt.setVisible(false);
		
		JButton b7 = new JButton("<-");
		b7.setBounds(1,1,100,40);
		JButton b8 = new JButton("->");
		b8.setBounds(300,1,100,40);
		JButton b9 = new JButton("Zurück");
		b9.setBounds(100,1,200,40);
		kontakt.add(b7);
		kontakt.add(b8);
		kontakt.add(b9);
		
		b9.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent ae) {
				kontakt.setVisible(false);
				adressliste.setVisible(true);
			}});
		b4.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent ae) {
				
				
				
				  
			}});
		//Kontaktsheet 2
		kontakt2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		kontakt2.setLayout(null);
		kontakt2.setSize(400,600);
		kontakt2.setLocation(50,50);
		kontakt2.setResizable(false);
		kontakt2.setVisible(false);
		
		JButton b11 = new JButton("<-");
		b11.setBounds(1,1,100,40);
		JButton b12 = new JButton("->");
		b12.setBounds(300,1,100,40);
		JButton b13 = new JButton("Zurück");
		b13.setBounds(100,1,200,40);
		kontakt2.add(b11);
		kontakt2.add(b12);
		kontakt2.add(b13);
		
		b13.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent ae) {
				kontakt2.setVisible(false);
				adressliste.setVisible(true);
			}});
		b11.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent ae) {
				
			}});
	}
}


Meine Textdatei:
PHP:
1Max;Mustermann;Hauptstraße;1;1111;Musterstadt;11111/11111;1111...;01.01.1901
2Maxine;Mustermann;Hauptstraße;2;1111;Musterstadt;11111/111111;1111....;31.12.1900

Wie man sieht funktioniert es mit zwei Beispielpersonen, aber es ist sehr undynamisch und die adressliste soll einen neuen Button hinzufügen, wenn man eine neue Person addet.

Bitte um Hilfe!!
Danke im Voraus.
 

vfl_freak

Premium-User
Moin,

baue das Ganze doch in eine Schleife, die solange läuft, wie mit "readLine" Zeilen eingelesen werden. Dabei dann nicht prüfen, ob die Zeilen mit einer Ziffer beginnen, sondern auf ein vorhandenes Zeilenende (\r \n bzw. umgekehrt oder 0xa / 0xd) !

Gruß
Klaus
 

Xemper

Grünschnabel
Können sie mir ein Code-Beispiel, anwendbar auf mein Problem hinzugeben, oder mir es genauer per Skype o.ä. erläutern? Zudem soll es ja auf mehr als 200 Einträge erweitert werden, was nur durch die Zahlen an Zeilenanfang möglich ist.
 
Zuletzt bearbeitet:

k1v1

Grünschnabel
Hallo,

eine Datei zeilenweise bis zum Ende einlesen tue ich immer so:
Code:
while((line = br.readLine()) != null)
{
// Hier der Code für die Verarbeitung der Zeile
}


in deinem Fall würde ich dann den Teil:
Code:
if((line = br.readLine()).startsWith(ZAHL)) {   
String[] parts = line.split(";");
String v2 = parts[0];     
String n2 = parts[1];
String s2 = parts[2];
String h2 = parts[3];
String p2 = parts[4];
String w2 = parts[5];
String tn2 = parts[6];
String hn2 = parts[7];
String gt2 = parts[8];
v2 = v2.substring(1);
b10.setText(v2+" "+n2);
b10.setBounds(1,100,200,40);
adressliste.add(b10);
kontakt2.setTitle(v2+" "+n2);
lv2.setText(v2);
ln2.setText(n2);
ls2.setText(s2);
lh2.setText(h2);
lp2.setText(p2);
lw2.setText(w2);
ltn2.setText(tn2);
lhn2.setText(hn2);
lgt2.setText(gt2);

kontakt2.add(lv2);
kontakt2.add(ln2);
kontakt2.add(ls2);
kontakt2.add(lh2);
kontakt2.add(lp2);
kontakt2.add(lw2);
kontakt2.add(ltn2);
kontakt2.add(lhn2);
kontakt2.add(lgt2);
}

durch diesen Teil ersetzen:
Code:
List<JFrame > listeMitKontakten = new LinkedList<JFrame >();
while((line = br.readLine()) != null) {   
JFrame kontakt = new JFrame ()
String[] parts = line.split(";");
String v2 = parts[0];     
String n2 = parts[1];
String s2 = parts[2];
String h2 = parts[3];
String p2 = parts[4];
String w2 = parts[5];
String tn2 = parts[6];
String hn2 = parts[7];
String gt2 = parts[8];
v2 = v2.substring(1);
b10.setText(v2+" "+n2);
b10.setBounds(1,100,200,40);
adressliste.add(b10);
k.setTitle(v2+" "+n2);
lv2.setText(v2);
ln2.setText(n2);
ls2.setText(s2);
lh2.setText(h2);
lp2.setText(p2);
lw2.setText(w2);
ltn2.setText(tn2);
lhn2.setText(hn2);
lgt2.setText(gt2);

kontakt.add(lv2);
kontakt.add(ln2);
kontakt.add(ls2);
kontakt.add(lh2);
kontakt.add(lp2);
kontakt.add(lw2);
kontakt.add(ltn2);
kontakt.add(lhn2);
kontakt.add(lgt2);
                }

Damit hast du dann eine Liste mit JFrame's.

Ich hoffe das Hilft dir.

Gruß
K1V1
 

Neue Beiträge