MIKE PERETZ
MIKE PERETZ

Reputation: 159

Read ArrayList of objects from a file

I am using the following method to save ArrayLists to serialized objects. File is generating successfully. However when I try to read it I get java.lang.ClassCastException. in line Item item = (Item)ois.readObject(); what is the proper way of loading the file?

save

String storage_path = Environment.getExternalStorageDirectory() + "/notesBackup.memo";
    Log.d("storage path",storage_path);
    File file2 = new File(storage_path);
    ArrayList<Item> items = new ArrayList();
    File filesdir = getFilesDir();
    ArrayList<String> itemsfiles = new ArrayList();
    for (String file : filesdir.list()) {
        if (file.endsWith(FILE_EXTENSION)) {
            itemsfiles.add(file);

        }
    }
    int i = 0;
    while (i < itemsfiles.size())

    {
        try {

            FileInputStream fis = openFileInput((String) itemsfiles.get(i));
            ObjectInputStream ois = new ObjectInputStream(fis);
            items.add((Item) ois.readObject());

            FileOutputStream fos = new FileOutputStream(file2);
            ObjectOutputStream ous = new ObjectOutputStream(fos);
            ous.writeObject(items);
            fis.close();
            ois.close();
           fos.close();
            ous.close();
            Log.d("file is creating",String.valueOf(i));


            i++;


        } catch (IOException e2) {
            e = e2;
        } catch (ClassNotFoundException e3) {
            e = e3;
        }


    }

load

    public static ArrayList<Item> getbackupitems(Context context) {
    Exception e;
    ArrayList<Item> items = new ArrayList();
    File filesdir = new File(Environment.getExternalStorageDirectory()+"/notesBackup.memo");
    if(filesdir.exists()){
        Log.d("file","found");
    }
    else {
        Log.d("file", "not found");
    }

        try {
            FileInputStream fis = new FileInputStream(filesdir);
            ObjectInputStream ois = new ObjectInputStream(fis);
            Item item = (Item)ois.readObject();
            items.add(item);
            fis.close();
            ois.close();
           Log.d(items.toString(),"");
        } catch (IOException e2) {
            e = e2;
        } catch (ClassNotFoundException e3) {
            e = e3;
        }

    return items;

}

Upvotes: 0

Views: 392

Answers (1)

Jeeppp
Jeeppp

Reputation: 1573

You are reading the list and trying to cast it to Item and that's why the error.

Try the below and check

List<Item> itemList = new  ArrayList<>();
 itemList = (List<Item>) ois.readObject();

Upvotes: 1

Related Questions