开发者

Reading an Object from a file to an ArrayList

When Im trying to read an object and store in arraylist but im getting an exception this is the part of code where im facing a problem.

public class Customer implements Serializable  {

private String username;
private String password;
private int age;
private String accttype;
private String acctno;
private float amount;

Customer() {
    System.out.println("Im in Customer");
}

public boolean writeToDataBase(String uname, String pwd, int cage, String caccttype, String cacctno, float camount) throws IOException  {

    Customer custobj = new Customer();
    FileOutputStream fos=null;
    ObjectOutputStream oos=null;
    custobj.username = uname;
    custobj.password = pwd;
    custobj.age = cage;
    custobj.accttype = caccttype;
    custobj.acctno = cacctno;
    custobj.amount = camount;
    try {

        fos=new FileOutputStream("Customerdetails.txt",true);
        oos=new ObjectOutputStream(fos);
        oos.writeObject(custobj);
        oos.close();
        fos.close();
        return true;
    } catch (Exception ex) {
        ex.printStackTrace();
        return false;
    }
    finally
    {
        fos.close();
        oos.close();
    }
}

public boolean retriveFromDataBase(int a) throws IOException
{
    try {
        Customer custobj = new Customer();
        FileInputStream开发者_JAVA百科 fis=null;
        ObjectInputStream ois=null;
        ArrayList<Customer> custlist;
        try {
             custlist = new ArrayList<Customer>();
            fis = new FileInputStream("Customerdetails.txt");
            ois = new ObjectInputStream(fis);
            while (fis.available()!=0) {
                custobj=(Customer)ois.readObject();
                custlist.add(custobj);
            }
            System.out.println("Customer List" + custlist.size());
            if (a == 3) {
                for (int i = 0; i < custlist.size(); i++) {
                    custobj = custlist.get(i);
                    custobj.displayCustomers();
                }
            }
            return true;

        } catch (Exception ex) {
            System.out.println(ex.toString());
            System.out.println("No users are presnt in the file");
            return false;
        }
        finally
        {
            ois.close();
            fis.close();
        }
    }
    catch(Exception ex)
    {
        System.out.println(ex.toString());
        return false;
    }
}
public void displayCustomers()
{
    try
    {
        System.out.println("details"+username+"\t"+age+"\t"+password+"\t"+acctno+"\t"+accttype+"\t"+amount);
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }
}
}


Does your object implement the Serializiable or Externalizeable interface? If yes do you use non transitive objects that don't implement serializiable/externalizeable and don't offer a argumentless default constructor?

Without further information (which exception, more code) it's hard to say.


I noted that the program throws java.io.StreamCorruptedException, when you run it for the second time. It works fine when you run it only once.

The problem is that you cannot APPEND to the same file : Customerdetails.txt every time you serialize in writeToDatabase(..) method. So remove the append flag : "true" in the call to constructor of FileOutputStream in writeToDatabase(..) method.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜