Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern

Kanissell

Mitglied
Hi,

ich habe vor kurzem angefangen ein bisschen Java zu lernen und verstehe gerade nicht wie das gehen soll :

In einer txt Datei sind Personen zeilenweise gespeichert in der Reihenfolge : Vorname: Name: Geburtsjahr:

Ich soll nun mit einem Scanner von der Datei lesen und alle Personen in einem PersonSet speichern.

Mein Ansatz wäre so :

Java:
public static Person createPerson(Scanner dataSource) {
  dataSource.useDelimiter("Vorname:\\*s,Nachname:\\*s,Geburtsjahr:\\*i");
  String Vorname = dataSource.next();
  String Nachname = dataSource.next();
  int Geburtsjahr = dataSource.nextInt();
  Person p = new Person(Vorname, Nachname, Geburtsjahr);
  return p;
}
    
public static PersonSet getPersonsFrom(Scanner dataSource) {
  PersonSet z = new PersonSet();     
  while (dataSource.hasNext()){
    createPerson(dataSource);
    z.add(createPerson(dataSource));
  }       
  return z;
}
aber das macht es leider nicht (z ist vom Typ PersonSet)

Eine andere Idee von mir wäre mit einer For Schleife über alle Zeilen zu iterieren und jede Person hinzuzufügen, aber ich weiß leider nicht wie man das Ende des Scanner definieren/eingeben soll.

Hoffe ihr könnt mir Ratschläge geben.

(Wir müssen es mit Scanner machen und können nicht bspw den Bufferreader benutzen)
 
Zuletzt bearbeitet von einem Moderator:
Speicher die personen mal in einer ArrayList und lass diese dir ausgeben, dann solltest du sie sehen.
ArrayList<Person> personen =new ArrayList<>();
personen.add( p);
 
hab ich mir auch überlegt, ob ich einfach alles aus der text datei nehme in einem array speichere und dadurch iteriere.

ich werds versuchen danke.
 
Bei createPerson gibts schon Probleme.

irgendwie stimmt da was nicht mit dem dataSource.next();


Der Fehler bei Eclipse :
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
at in3a06Personen.In03a06Personen.createPerson(In03a06Personen.java:53)
at in3a06Personen.In03a06Personen.getPersonsFrom(In03a06Personen.java:65)
at in3a06Personen.In03a06Personen.getPersonsFrom(In03a06Personen.java:75)
at in3a06Personen.In03a06Personen.main(In03a06Personen.java:16)
 
du hast nich alles in einer klasse? also eine klasse Person mit konstruktor, gettern/settern und toString.

dann rufst du in einer TestKlasse den konstruktor von Person mit den eingelesenen Daten auf (Person p = new Person( vorname, nachname, Geburstjahr) und speicherst die referenz auf das Objekt anschließend in der ArrayList vom typ person. (ArrayList<Person> personen =new ArrayList<>(); personen.add( p); Wenn du alle Personenen erstellt hast kannst du dir den Inhalt ausgeben lassen mit personen( i).toString().

//EDIT
Java:
public class Person {
    
    String vorname, nachname;
    int geburstjahr;    
    
    public Person( String vorname, String nachname, int geburstjahr){
        this.vorname =vorname;
        this.nachname =nachname;
        this.geburstjahr =geburstjahr;
    }
    
    @Override
    public String toString() {
        return "Person{" + "vorname=" + vorname + ", nachname=" + nachname + ", geburstjahr=" + geburstjahr + '}';
    }

    public String getVorname() {
        return vorname;
    }

    public void setVorname(String vorname) {
        this.vorname = vorname;
    }

    public String getNachname() {
        return nachname;
    }

    public void setNachname(String nachname) {
        this.nachname = nachname;
    }

    public int getGeburstjahr() {
        return geburstjahr;
    }

    public void setGeburstjahr(int geburstjahr) {
        this.geburstjahr = geburstjahr;
    }
    
}

Java:
public class PersonTest {
    
    static ArrayList<Person> personen =new ArrayList<>();
    
    public static void createPerson(Scanner dataSource) {
      dataSource.useDelimiter("Vorname:\\*s,Nachname:\\*s,Geburtsjahr:\\*i");
      String Vorname = dataSource.next();
      String Nachname = dataSource.next();
      int Geburtsjahr = dataSource.nextInt();
      Person p = new Person(Vorname, Nachname, Geburtsjahr);
      personen.add( p);
    }
    
    public static void main( String[] args){
        //aufruf creatPerson( dataSource);
        for( Person p :personen){
            System.out.println( p.toString());
        }
    }
    
}
 
Zuletzt bearbeitet:
danke für deine antwort.

hab es lösen können, war wohl mein fehler, er hat immer eine Zeile übersprungen und deshalb kam dieser fehler, habs behoben und dann ging es alles.

trotzdem danke für deine Mühe !
 

Neue Themen


Zurück
Oben