2012-04-11 6 views
0

In einer person.txt haben wir die Personendaten gespeichert. Es scheint so.File Reader liest nicht alle Daten bis zum Ende

John 
Smith 
aösldkjf 
5 
8645 
asdfasf 
0441234545 
++++++ 
Adam 
Gilchrist 
ads 
asf 
asf 
asfd 
0441234546 
++++++ 

Dann haben wir die FileManager-Klasse erstellt, um die Daten aus dieser Datei zu lesen. Es identifiziert, dass es zwei verschiedene Einträge gibt. Aber es liest immer die ersten 8 Zeilen und bewegt sich nicht weiter. Daher wird die erste Person (zB: - John Smith) zweimal zur "LinkedList", genannt AddressBook, hinzugefügt.

// Dateimanager Klasse

public class FileManager { 

    public static void readFile() { 

     Scanner x; 

     LinkedList<String> tempList = new LinkedList<String>(); 

     try { 
      x = new Scanner(new File("Person.txt")); 

      @SuppressWarnings("unused") 
      String temp = null; 

      while (x.hasNext()) { 
       tempList.add(x.next()); 
       tempList.add(x.next()); 
       tempList.add(x.next()); 
       tempList.add(x.next()); 
       tempList.add(x.next()); 
       tempList.add(x.next()); 
       tempList.add(x.next()); 
       tempList.add(x.next()); 

       Person person = new Person(); 

       person.addFilePerson(tempList); 

       Main.addressBook.add(person); 

      } 
     } catch (Exception e) { 
      System.out.println("could't find the file"); 
     } 
    } 
} 

// addFilePerson Methode in der Klasse Person

public void addFilePerson(LinkedList<String> list){ 

    vorname = list.get(0); 
    nachname = list.get(1); 
    strasse = list.get(2); 
    hausnummer = list.get(3); 
    plz = list.get(4); 
    telefon = list.get(5); 
    wohnort = list.get(6); 
} 

Antwort

1

Sie erstellen einLinkedList<String> und wiederholt ihm hinzufügen. Bewegen Sie die folgende Zeile:

LinkedList<String> tempList = new LinkedList<String>(); 

in die while Schleife. Alternativ - und vorzugsweise IMO - verwenden Sie separate Eigenschaften für die verschiedenen Teile:

// TODO: Consider what happens if the file runs out half way through a person... 
while (x.hasNext()) { 
    Person person = new Person(); 
    person.setFirstName(x.next()); 
    person.setLastName(x.next()); 
    person.setStreet(x.next()); 
    person.setTown(x.next()); 
    person.setTelephoneNumber(x.next()); 
    person.setCity(x.next()); // Or whatever... 

    Main.addressBook.add(person); 
} 

Es gibt andere Optionen um einen „Baumeister“ Typ für Person Erstellen und Person macht sich unveränderlich, und man könnte eine separate Address erstellen möchten Typ ...

1

Sie sollten Ihre Liste löschen (oder neu erstellen) zwischen dem Lesen der Personen aus der Datei. Andernfalls fügen Sie dieselbe Person (die erste, die Sie gelesen haben) dem Adressbuch hinzu. Erstellen Sie also entweder Ihre Temp-Liste innerhalb der Schleife jedes Mal neu, wie Jon vorgeschlagen hat, oder löschen Sie sie nach jeder Runde:

+0

nur eine Zeile Code zu tun. funktioniert perfekt. –

1

Es geht tatsächlich weiter. Diese Zeile:

person.addFilePerson(tempList); 

Sie die tempList als Parameter senden, aber in addFilePerson Methode, die Sie immer die tempList ‚s erste 7 Einträge lesen. Sie sollten die tempList in jeder Iteration der Schleife löschen.

0

Sie sollten nextLine() und hasNextLine() anstelle von next() und hasNext() verwenden. Der Scanner ist kontextabhängig, sodass das Verhalten beim Lesen von Standard-Token möglicherweise nicht zeilenbasiert ist.

0

würden Sie besser dran

Person person = new Person(); 
Address address = new Address(); 
person.setAddress(address); 

person.setFirstName(x.next()); 
person.setLastName(x.next()); 
address.setStreetName(x.next()); 
address.setHouseNumber(x.next()); 
address.setZipCode(x.next()); 
person.setPhoneNumber(x.next()); 
address.setCityName(x.next()); 
Verwandte Themen