0

我希望我的应用程序在本地存储多个对象以供以后使用。

现在,我的问题是我知道如何ObjectInputStream通过获取整个文件(federations.dat)来加载对象。有没有办法让我object WHERE id = N从“federations.dat”加载说?还是我必须为每个对象创建单独的文件?

这是我的加载方法:

public static Object load(Context ctx, String filename) throws FileNotFoundException 
{
    Object loadedObj = null;
    InputStream instream = null;

    instream = ctx.openFileInput(filename);

    try {
        ObjectInputStream ois = new ObjectInputStream(instream);
        loadedObj = ois.readObject();
        return loadedObj;
        
    } catch (StreamCorruptedException e) {
        e.printStackTrace();
        return null;
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    return null;
}

有什么建议吗?

4

2 回答 2

2

你可以这样用。。

ArrayList<Object> arrayList = new ArrayList<Object>();

Object obj = null;

while ((obj = ois.readObject()) != null) {
    arrayList.add(obj);
}

您可以在您的方法上返回一个 ArrayList。

return arrayList;

编辑:完整的代码是这样的..

public static ArrayList<Object> load(Context ctx, String filename) 
{
    InputStream fis = null;
    ObjectInputStream ois = null;

    ArrayList<Object> arrayList = new ArrayList<Object>();

    Object loadedObj = null;
    try {
        fis = ctx.openFileInput(filename);
        ois = new ObjectInputStream(fis);

        while ((loadedObj = ois.readObject()) != null) {
             arrayList.add(loadedObj);
        }
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    } finally {
        if (null != ois) ois.close();
        if (null != fis) fis.close();
    }

    return arrayList;
}

希望能帮助到你..

于 2012-06-29T07:33:08.617 回答
1

@Jan 代码的扩展,解决了在ois抛出异常时保持打开的问题,以及一些小问题。

public static ArrayList<Object> load(Context ctx, String filename) throws FileNotFoundException {
    InputStream instream = ctx.openFileInput(filename);

    ArrayList<Object> objects = new ArrayList<Object>();

    try {
        ObjectInputStream ois = new ObjectInputStream(instream);
        try{
            Object loadedObj = null;
            while ((loadedObj = ois.readObject()) != null) {
                objects.add(loadedObj);
            }

            return objects;
        }finally{
            ois.close();
        }

    } catch (StreamCorruptedException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    return null;
}
于 2012-06-29T08:02:12.940 回答