2016-03-21 12 views
-1

Ich habe ein Problem mit dem Lesen eines bestimmten Objekts aus einer Datei und dem Speichern in ArrayList.Objekt aus einer Datei lesen und in ArrayList speichern

Zuerst schreibe ich einen einzelnen Kunden mit writeCustomer(). Dann schreibe ich alle Datensätze von List customerList und speichere sie in der Datei. Das funktioniert großartig.

Dann möchte ich die gespeicherte Datei lesen, also lese ich eine Zeile mit readCustomer(). Diese Methode gibt eine Customer zurück und dann möchte ich eine Liste mit allen Clients mit readData() zurückgeben und lesen, ich habe nullPointerException in Zeile list.add (readCustomer (bufferedReader));

Meine Class Customer hat einen Konstruktor und hat eine Override-Methode toString().

public class SaveCustomers { 

public static void main(String[] args) throws IOException { 

    List<Customers> customersList = new ArrayList<>(); 
    customersList.add(new Customers("ABC", 10)); 
    customersList.add(new Customers("SGS", 20)); 
    customersList.add(new Customers("FSD", 30)); 

    try (PrintWriter out = new PrintWriter("customer.txt", "UTF-8")) 
    {   writeData(customersList, out);  } 


    BufferedReader bufferedReader = new BufferedReader(new FileReader("customer.txt")); 
    List<Customers> newList = readData(bufferedReader); 


    for(Customers c: newList){ 
     System.out.println(c); 
    } 
} 

private static void writeCustomer(PrintWriter out, Customers customers){ 
    out.println(customers.getName()+"|"+customers.getTarrif()); 
} 

private static void writeData(List<Customers> customersList, PrintWriter out){ 
    for(Customers c:customersList){ 
     writeCustomer(out, c); 
    } 
} 

public static Customers readCustomer(BufferedReader bufferedReader) throws IOException { 
    String line = bufferedReader.readLine(); 
    String [] tokens = line.split("\\|"); 
    String name = tokens[0]; 
    int time = Integer.valueOf(tokens[1]); 
    return new Customers(name, time); 
} 

public static List<Customers> readData(BufferedReader bufferedReader) throws IOException { 

    List<Customers> list = new ArrayList<>(); 
     while (bufferedReader.readLine() != null) { 
      list.add(readCustomer(bufferedReader)); 
     } 
    return list; 
}} 
+1

"* Ich habe ein Problem .... es funktioniert nicht *" - was genau passiert? Ausnahme? Falsche Ausgabe? Endlosschleife? –

+0

Danke Sasha für die Verringerung meines Rufes. Ich hoffe, dass du es getan hast, hast du bessere Laune .... – bartek1982

+0

Ich habe nicht runtergestimmt, wenn du interessiert bist. Kommentar ist manchmal nur ein Kommentar. Die meisten Leute, die einen Downvote machen, kommentieren überhaupt nicht. –

Antwort

0

Sie sind in der Nähe der Lösung;)

In Methode:

readData(BufferedReader bufferedReader) 

Gerade diese Zeile ändern

for(Customers l : list) { 

auf diese:

while (bufferedReader.ready()) { 
+0

Danke Ben. Es funktioniert ruhig gut. Meine Ausgabe sieht so aus: BC 10 GS 20 SD 30. Aber es ist etwas für beginne :) – bartek1982

+0

Es ist seltsam, bufferedReader.readLine(); gibt BC | 10 zurück, obwohl in der Datei customer.txt ABC | 10 vorhanden ist ... – Ben

+0

Ok while (bufferedReader.ready()) {statt while (bufferedReader.read()! = -1) { (Lösung bearbeitet) – Ben

Verwandte Themen