2016-03-21 18 views
-1

Belirli bir nesneyi bir dosyadan okumak ve ArrayList'e kaydetmek konusunda bir sorunum var.Bir dosyadan nesne okumak ve ArrayList'e kaydetme

İlk önce writeCustomer() kullanarak tek bir müşteri yazıyorum. Sonra tüm kayıtları List customerList'dan yazıp dosyaya kaydediyorum. Bu harika çalışıyor.

Sonra kaydedilen dosyayı okumak istiyorum, bu yüzden readCustomer() kullanarak bir satırı okuyorum. Bu yöntem, bir Customer döndürür ve sonra kullanarak tüm Clients ile bir liste dönmek ve okumak, satır list.add içinde nullPointerException var (readCustomer (bufferedReader));

Class Customer Benim bir kurucunun var ve bir geçersiz kılma yöntemine sahip 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

"* Bir sorunum var .... çalışmıyor *" - tam olarak ne oluyor? İstisna? Yanlış mısın? Sonsuz döngü? –

+0

Saygınlığımı azaltmak için teşekkür ederim Sasha. Umarım bunu yaptığınız için daha iyi bir ruh halinize sahip olursunuz .... – bartek1982

+0

İlgilenirseniz, oy vermedim. Yorum bazen sadece bir yorumdur. Reddetmeyen çoğu kullanıcı yorumda bulunmaz. –

cevap

0

Sen çözümü yakındırlar;) yöntemde

:

readData(BufferedReader bufferedReader) 

Sadece bu birine bu satırı

for(Customers l : list) { 

değiştirin:

while (bufferedReader.ready()) { 
+0

Teşekkür ederim Ben. Sessiz çalışıyor. Çıktım şöyle görünüyor: BC 10 GS 20 SD 30. Ama başlamak için bir şey :) – bartek1982

+0

Bu garip, bufferedReader.readLine(); customer.txt dosyasında ABC | 10 olmasına rağmen BC | 10 döndürür ... – Ben

+0

Kullanmak yerine while (bufferedReader.ready()) {yerine (bufferedReader.read()! = -1) { (çözüm düzenlenir)) – Ben

İlgili konular