Daten aus Txt-Dateien auslesen

Saban

Erfahrenes Mitglied
Hallo Zusammen!

Ich möchte eine Text-Datei auslesen, die folgendermaßen aufgebaut ist:

Max, Mustermann
Dagobert, Duck
Micky, Maus

Nun weiß ich zwar das man eine Zeile einer TextDatei mit
Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class AusDateiLesen {
	public static void main(String [] args) throws IOException{
		FileReader read = new FileReader("D:\\Test\\TestDatei.txt");
		BufferedReader buffer	= new BufferedReader(read);
		
		String ausgabe = buffer.readLine();
		System.out.println(ausgabe);
	}
}
auslesen kann. Aber ich schaffe es nicht eine ganze Datei auszulesen... :(
Ich hätte die Daten gern in einem 2 Dimensionalen Array.

Danke für eure Hilfe!

Grüße
Saban
 
Zuletzt bearbeitet von einem Moderator:
Morgen!

Danke für den Post... Hat mir geholfen :)
Jetzt steh ich aber vor einem anderen Problem und zwar hab ich nun ein Array[192], dessen Inhalt wiedergeben werden soll nur nicht der Reihe nach sondern durcheinander... ich hab mir schon überlegt mit Math.random() ne Zahl erstellen zu lassen und diese dann als Index zu nehmen nur so viel ich weiß geht Math.random() doch nur bis 9 oder? ich will auch sicher stellen das wirklich jeder Inhalt nur einmal vor kommt.

Kann mir jemand helfen?

MfG
Saban
 
Math.random geht von 0.0 bis 1.0 muß also nur mit 191 multipliziert werden um Werte von 0-191 zu bekommen.

Einfacher ist da aber vllt
Random r = new Random();
int random = r.nextInt(191);
 
Da wäre es doch sinnvoller das Array zu mischen und es dann wiederzugeben. Oder willst du einfach jedes Mal zufällig eins ausgeben, auch wenn es irgendwann das selbe sein kann oder eins nie ausgegeben wurde?
 
Hi!
Also ich wollte eigentlich mein Array mischen und dann wiedergeben und es sollte alles soweit wie möglich nur einmal ausgegeben werden...
Nun habe ich aber bisschen was umgeschrieben (eigtl das ganze Programm von Grund auf neu gestaltet) und komm nicht mehr weiter ich weiß nicht ob ich grad aufm schlauch stehe oder ich wirklich vor nem Problem stehe... Ich kann nun nichts mehr in meine TextFields schreiben ich habe probiert es in der Klasse wo ich Sie erstelle mit setText zu setzen und durch meine "selbst geschriebene" Methode aber ich kann nichts mehr in die TextFields rein schreiben... :(
Ich hoffe ihr könnt mir helfen...

Hier mein Code zum Aufbau:
Java:
package Klasse_11_Quiz;

import java.awt.Container;
import java.awt.Font;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import Klasse_11_Quiz.TextFeldBegrenzung;

public class Aufbau {
	/* Klassenvariablen */
	private JFrame frame = new JFrame("Hauptstäde Quiz");
	private String str_pfad = "D:\\Programm Files\\Programmieren\\eclipse\\pics roland\\Symbole & Logos\\Symbole part 1\\32x32\\";
	private JTextField tf_land[] = new JTextField[5];
	private JTextField tf_stadt[]= new JTextField[tf_land.length];
	private JLabel lb_lösung[] 	 = new JLabel[5];
	private Font font = new Font("SansSerif", Font.BOLD, 14);
	
	/* Methoden zum Anzeigen und Ausblenden des Frames */
	public void anzeigen(boolean bool){
		frame.setVisible(bool);
	}
	
	/* Methoden zum Refreshen der Anzeige */
	public void refresh(){
		frame.repaint();
	}
	
	/* Methode zum einfügen der Länder mit jeweiligem Index */
	public void setLand(String land, int index){
		tf_land[index].setText(land);
	}
	
	/* Methode zur Abfrage der Eingabe bei den Städten mit jeweiligem Index */
	public String getStadt(int index){
		return tf_stadt[index].getText();
	}
	
	/* Methode zum ändern der Größe des Frames */
	public void setGröße(int x, int y){
		frame.setSize(x, y);
	}
	
	/* Konstruktor der Klasse Aufbau*/
	public Aufbau(){
		for(int index = 0; index < tf_land.length; index++){
			/* Initialisieren der TextFeld- und Label-Arrays */
			tf_land[index] 	= new JTextField();
			tf_stadt[index]	= new JTextField();
			lb_lösung[index]= new JLabel();
			
			/* Eigenschaften der TextFelder der Länder */
			tf_land[index].setHorizontalAlignment(JTextField.CENTER);
			tf_land[index].setDocument(new TextFeldBegrenzung(1));
			tf_land[index].setFont(font);
			tf_land[index].setEditable(false);
			
			/* Eigenschaften der TextFelder der Hauptstädte */
			tf_stadt[index].setHorizontalAlignment(JTextField.CENTER);
			tf_stadt[index].setDocument(new TextFeldBegrenzung(1));
			tf_stadt[index].setFont(font);

			/* Eigenschaften der Labels */
			lb_lösung[index].setIcon(new ImageIcon(str_pfad + "actions\\appointment-new.png"));
		}
	
		/* Container für die Komponenten auf dem Frame */
		Container c = frame.getContentPane();
		
		/* Layout des Frames */
		c.setLayout(null);
		
		/* Variablen zur Positionierung */
		int pos_x 	= 10;
		int pos_y 	= 10;
		int breite 	= 150;
		int höhe 	= 32;
		
		/* Layout der TextFelder der Länder */
		for(int index = 0; index < tf_land.length; index++){
			tf_land[index].setBounds(pos_x, pos_y, breite, höhe);
			pos_y = pos_y + 40;
		}
		
		pos_x 	= breite + 20;
		pos_y 	= 10;
		
		/* Layout der TextFelder der Städte */
		for(int index = 0; index < tf_land.length; index++){
			tf_stadt[index].setBounds(pos_x, pos_y, breite, höhe);
			pos_y = pos_y + 40;
		}
		
		pos_x 	= 2 * breite + 30;
		pos_y 	= 10;
		breite = 32;
		
		/* Layout der Labels */
		for(int index = 0; index < tf_land.length; index++){
			lb_lösung[index].setBounds(pos_x, pos_y, breite, höhe);
			pos_y = pos_y + 40;
		}
		
		/* Dem Container die Komponenten hinzufügen */
		for(int index = 0; index < tf_land.length; index++){
			c.add(tf_land[index]);
			c.add(tf_stadt[index]);
			c.add(lb_lösung[index]);
		}
	}
}

Hier mein Code zum Einlesen:
Java:
package Klasse_11_Quiz;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Einlesen {
	private String array[][] = new String[20][2];
	
	/* Methode zur Übergabe von Land und Stadt */
	public String getArray(int x, int y){
		return array[x][y];
	}
	
	/* Konstruktor */
	public Einlesen() throws IOException{
		FileReader read 		= new FileReader("D:\\Programm Files\\Programmieren\\eclipse\\Schule\\StadtLand.txt");
		BufferedReader buffer	= new BufferedReader(read);
		
		String line = "";
		int x = 0; 
		int y = 0;
		
		do {				
			line = buffer.readLine();
			if(line != null){
				String tmp[] = line.split(":");
				
				array[x][y]		= tmp[0];
				array[x][y+1] 	= tmp[1];
				x = x + 1;
			}
			else{
				break;
			}
		}while(true);
	}
}

Hier meine Textfeldbegrenzung:
Java:
package Klasse_11_Quiz;

import javax.swing.text.PlainDocument;
import javax.swing.text.BadLocationException;
import javax.swing.text.AttributeSet;

/**
 * Diese Klasse ist ein Dokument für Textfelder, welches die Eingabe auf
 * x Zeichen begrenzt.
 *
 * Die Zuweisung geschieht über
 * JTextfield.setDocumenT(new Validation(int anzahl));
 */
class TextFeldBegrenzung extends PlainDocument
{
    private int limit;

    /**
     * Konstruktor für das Validationdokument
     * @param int limit: maximale Anzahl der einzugebenen Zeichen
     */
    public TextFeldBegrenzung(int newLimit)
    {
        super();
        if (limit < 0)
        {
            limit = 0;
        }
        else
        {
            limit = newLimit;
        }
    }
        

    private String mask = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private int maxLength = 12;

    public void insertString(int off, String str, AttributeSet a) throws BadLocationException
    {
        if(str.length()+getLength() > maxLength)
            return;
        if(mask.indexOf(str)==-1)
            return;
        super.insertString(off,str,a);    
    }
}

und hier meine Main:
Java:
package Klasse_11_Quiz;

import java.io.IOException;

public class Quiz{
	public static void main(String [] args) throws IOException{
		Aufbau aufbau = new Aufbau();
		Einlesen einlesen = new Einlesen();
		
		aufbau.anzeigen(true);
		
		for(int index = 0; index < 5; index++){
			aufbau.setLand(einlesen.getArray(index, 0), index);
		}
	}
}

//Edit: 10.06.08 - 10.10 Uhr
Ich habe nun raus gefunden das es an dem PlainDocument liegt aber habe keine Ahnung wieso. Ich habe das einfach die Zeile
Java:
tf_land[index].setDocument(new TextFeldBegrenzung(1));
auskommentiert und nun gehts. Das PlainDocument hab ich schon mal bei einem anderen Projekt benutzt da lief es beim setText eigentlich reibungslos könnt ihr mir weiter helfen?

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

ich greife diesen Thread einfach mal auf, weil mein Problem es eigentlich nicht wert ist einen neuen Thread zu eröffnen. Eigentlich ist es todpeinlich aber es funktioniert einfach net.. Vielleicht liegt es am Montag morgen..

Ich versuche etwas aus einer .txt Datei einzulesen und zu verarbeiten, doch es funktioniert einfach nicht.

FileReader read;
try {
read = new FileReader("C:\\test.txt");

BufferedReader buffer = new BufferedReader(read);

String ausgabe;
try {
ausgabe = buffer.readLine();
System.out.println(ausgabe);
} catch (IOException e) {
e.printStackTrace();
}

} catch (FileNotFoundException e) {
e.printStackTrace();
}


DAs ist die Ausgabe:
java.io.PrintStream@3eca90java.io.PrintStream@64dc11

mfg
unltd
 
nein, da bin ich mir sicher das der Inhalt anders ist. Es handelt sich um eine Ausgabe eines Programmes, dieses Textfile will ich nun auf bestimmte Schlüsselworte überprüfen und die Daten in eine Datenbank füllen.

Die erste Zeile der Datei sind Rauten...

Hat sonst keiner eine Idee?
 
Zurück