2016-03-21 21 views
-1

ファイルから特定のオブジェクトを読み取り、ArrayListに保存する際に問題があります。ファイルからオブジェクトを読み込んでArrayListに保存する

最初に、writeCustomer()を使用して単一の顧客を作成します。次に、すべてのレコードをList customerListから書き込み、ファイルに保存します。これは素晴らしいです。

私はreadCustomer()を使って1行を読むので、保存したファイルを読みたいと思います。このメソッドはCustomerを返します。そしてreadData()を使用してすべてClientsのリストを返したいのですが、それを読んで、私はlist.add(readCustomer(bufferedReader))のnullPointerExceptionを持っています。

私のClass Customerには1つのコンストラクタがあり、オーバーライドメソッド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

"問題がある....それは動作しない*" - どういうことが起こりますか?例外?間違った出力?無限ループ? –

+0

私の評判を落としてくれてありがとうSasha。私はあなたのおかげで気分が良くなったことを願っています。 – bartek1982

+0

興味があれば、私はダウンボートしませんでした。コメントはちょうどコメントです。 downvoteのほとんどの人は全くコメントしません。 –

答えて

0

あなたが解決策に近い;)メソッドで

readData(BufferedReader bufferedReader) 

はちょうどこの1にこのライン

for(Customers l : list) { 

を変更:

while (bufferedReader.ready()) { 
+0

Benありがとうございます。それは静かな良い動作します。私の出力は次のようになります:BC 10 GS 20 SD 30.しかし、それは始まりのためのものです。 – bartek1982

+0

これは変わった、bufferedReader.readLine(); customer.txtファイルにABC | 10がありますが、BC | 10が返されます... – Ben

+0

while while(bufferedReader.read()!= -1)の代わりに(bufferedReader.ready()){{ (solution edited ) – Ben