Problem beim Einlesen einer Datei

Status
Nicht offen für weitere Antworten.

TheDestroyer

Aktives Mitglied
hey, hbe eine klasse Student, welche Daten aus einer Datei einelsen soll. Das Prog müsste iegntlich klappen, allerdings kommt ständig vollgender Fehlercode:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 441
at java.lang.String.charAt(Unknown Source)
at Übung09.Student_daten.datenverifizieren(Student_daten.java:34)
at Übung09.Student_daten.main(Student_daten.java:88)

Poste hie mal meinen Code, an der Datei liegt es nicht, sie befindet sich auch an der korrekten Position. Wäre cool wenn jemand von euch den Fehler sehen würde.
Code:
package Übung09;

import java.io.*;

public class Student_daten {

	public static String read() {
		String dat="";
		
		try
		{
			FileReader f = new FileReader("F:/Eigene Dateien/Eclipse/Übung/Übung09/studentendaten.txt");

			int c;
			while ((c = f.read()) != -1)
					dat = dat + (char) c;
			f.close();

		} catch (IOException e) {
			System.out.println("Fehler beim Lesen der Datei");
		}
		return dat;
	}

	public static void datenverifizieren(){
		
		Student[] student_data = new Student[10];
		String text,name="",matrikel="",tag="",monat="",jahr="";	
		int mat=0,t,m,j,i=0;
		
			text = read();

		for(int k = 0; k <7;k++){
			while(text.charAt(i) != (char)45){
				name = name + text.charAt(i);
				i++;
			}
			i++;
			while(text.charAt(i) != (char)45){
				matrikel = matrikel + text.charAt(i);
				i++;
			}
			i++;
			while(text.charAt(i) != (char)46){
				tag = tag + text.charAt(i);
				i++;
			}
			i++;
			while(text.charAt(i) != (char)46){
				monat = monat + text.charAt(i);
				i++;
			}
			i++;
			while(text.charAt(i) != (char)59){
				jahr = jahr + text.charAt(i);
				i++;
			}
			i=i+3;
			
			
				
			t = Integer.parseInt(tag);
			m = Integer.parseInt(monat);
			j= Integer.parseInt(jahr);
			mat = Integer.parseInt(matrikel);
			
			Date_object date = new Date_object(t,m,j);
			
			try {
					Student student = new Student(name,date,mat);
					student_data[k] = student;
			}
			catch(InvalidNumberException e){
				System.out.println("Matrikelnummer fehlerhaft bei: " + name + " | " + date.toString());
				System.out.println();
			}
			
			name="";matrikel="";tag="";monat="";jahr="";
			
		}	
		for(int l = 0; l < 7 ; l++){
			System.out.println(student_data[l]);
		}
	}

	public static void main(String[] args) {
		
		datenverifizieren(); //Datei einlesen
	}
}

Code:
package Übung09;



public class Student {
	
	private String pr_name;
	private Date_object pr_birthdate;
	private int pr_matrikel;
	
	public Student(String name, Date_object birthdate, int matrikel){
		
		pr_name = name;
		pr_birthdate = birthdate;
		
		pr_matrikel = matrikel;
		if (pr_matrikel < 100000 || pr_matrikel > 999999){
			throw new InvalidNumberException("") ;
		}
		
	}
	
	public void check_matrikel(){
		
		
		
	}
	
	public String toString(){
		return "Name: " + pr_name + " | " + "Geburtsdatum: " + pr_birthdate + " | " + "Matrikel-Nr.: " + pr_matrikel;
	}
	
	
}
 
Hier ist die Aufgabenstellung, nach welcher ich berarbeitet habe.

Aufgabe 34: Klasse Student
Definieren Sie eine Klasse Student mit mindestens den Attributen Name, Vorname, Matrikelnummer und Geburtsdatum vom Typ Datum aus Aufgabe 26.
Schreiben Sie geeignete Konstruktoren, die ein Objekt mit Namen, Vornamen, Matrikelnummer und wahlweise auch mit dem Geburtsdatum initialisieren.
Als weitere Methode ist die Methode toString() zur Ausgabe eines Studenten-Objektes zu formulieren und eine Methode compareTo(), die Objekte nach Familiennamen ordnet.
Hinweis: Beachten Sie, dass eine import-Anweisung nötig ist, falls die Klasse Datum in einem anderen Ordner steht.
Schreiben Sie ein Testprogramm StudentenTest, in dem mehrere Datensätze mit den relevanten Studenten-Daten aus einer Datei eingelesen werden und in ein Array vom Typ Student konvertiert werden. Das Array ist zur Kontrolle auszugeben.
Hinweis: Sie können diese Beispieldatei verwenden und erweitern, zum Einlesen steht die Methode readStringArray bereit.
 
Ich denke dass es an deinem Datei-Format liegt.
Entweder sind keine 7 Datensätze vorhanden oder sie sind nicht im richtigen Format.

Man könnt um die Sache zu vereinfachen StringTokenizer nehmen und sich ein paar neue Regeln für die Begrenzungszeichen ausdenken.
Bsp:
Code:
# = Datensatzende
- = Datumstrenner
| = Feld-Trenner

text: 12-12-2006|Michael Schulze|113456#11-12-2006|Thomas Maier|345435#

StringTokenizer felder, datum;
StringTokenizer datensaetze = new StringTokenizer(text,"#");
while(datensaetze.hasMoreToken()){
   felder = new StringTokenizer(datensaetze.nextToken(),"|");
   for(int i=0; i<3; i++){
      datum = new StringTokenizer(felder.nextToken(),"-"); // 1. Datenfeld, das Datum
      tag   = Integer.parseInt(datum.nextToken());
      monat = Integer.parseInt(datum.nextToken());
      jahr  = Integer.parseInt(datum.nextToken());
      name  = felder.nextToken(); // 2.Datenfeld, der Name
      matnr = Integer.parseInt(felder.nextToken()); // 3.Datenfeld, die Matrikelnummer
      ...
   }
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben