繁体   English   中英

如何从单个文件保存和多个对象?

[英]How do I save and multiple objects from a single file?

我正在尝试创建一个系统,用户可以在其中选择一组ID(联盟ID)来从外部API检索数据。 从Web服务检索数据后,我希望将其存储在本地以供以后使用。 现在,我的问题是我知道如何通过获取整个文件(federations.dat)从ObjectInputStream加载对象。 我有办法从“ federations.dat”加载“ WHERE id = N的对象”吗? 还是我必须为每个对象创建单独的文件?

这是我的加载方法:

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;
}

有什么建议吗?

您可以像这样使用它。

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;
}

希望能帮助到你..

扩展到@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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM