android - 从内部存储读取 ArrayList

标签 android arraylist storage fileinputstream

我有一个 Android 应用程序,我想读取和写入 ArrayList<MyClass>到内部存储。

写作部分有效(我相信,还没有测试过:-)):

ArrayList<MyClass> aList;

    public void saveToInternalStorage() {
    try {
        FileOutputStream fos = ctx.openFileOutput(STORAGE_FILENAME, Context.MODE_PRIVATE);
        fos.write(aList.toString().getBytes());
        fos.close();
    }
    catch (Exception e) {
        Log.e("InternalStorage", e.getMessage());
    }
}

但是我现在想做的是从存储中读取整个 ArrayList 并将其作为 ArrayList 返回,如下所示:

public ArrayList<MyClass> readFromInternalStorage() {
        ArrayList<MyClass> toReturn;
        FileInputStream fis;
        try {
            fis = ctx.openFileInput(STORAGE_FILENAME);

            //read in the ArrayList
            toReturn = whatever is read in...

            fis.close();
        } catch (FileNotFoundException e) {
            Log.e("InternalStorage", e.getMessage());
        } catch (IOException e) {
            Log.e("InternalStorage", e.getMessage()); 
        }
        return toReturn
}

我以前从未使用 Android 读取过文件,所以我不知道这是否可能。 但是有没有一种方法可以让我在我的自定义中阅读ArrayList

最佳答案

你必须序列化/反序列化你的对象:

您的 MyClass 必须实现可序列化,并且 MyClass 内的所有成员都必须可序列化

 public void saveToInternalStorage() {
        try {
            FileOutputStream fos = ctx.openFileOutput(STORAGE_FILENAME, Context.MODE_PRIVATE);
            ObjectOutputStream of = new ObjectOutputStream(fos);
            of.writeObject(aList);
            of.flush();
            of.close();
            fos.close();
        }
        catch (Exception e) {
            Log.e("InternalStorage", e.getMessage());
        }
}

反序列化对象:

public ArrayList<MyClass> readFromInternalStorage() {
    ArrayList<MyClass> toReturn;
    FileInputStream fis;
    try {
        fis = ctx.openFileInput(STORAGE_FILENAME);
        ObjectInputStream oi = new ObjectInputStream(fis);
        toReturn = oi.readObject();
        oi.close();
    } catch (FileNotFoundException e) {
        Log.e("InternalStorage", e.getMessage());
    } catch (IOException e) {
        Log.e("InternalStorage", e.getMessage()); 
    }
    return toReturn
} 

关于android - 从内部存储读取 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17047537/

相关文章:

Android:将 keystore 移交给不同的开发人员

android - 如何在android中的ListFragment中设置所选项目的颜色?

Java打印数组列表编号

java: NoSuchElementException: 读取 arrayList

java - 在 Object 的 ArrayList 中,如何将 Object 转换为 ArrayList 中包含的类的 3 个实例之一?

android - 使用纹理 View 保存视频

android - 从 Intent.createChooser() 启动时如何防止应用程序/Activity 的多个实例?

ios - MapleBacon.DiskStorage 3.0.0 升级后不再授予对镜像的访问权限 : why?

android - android:将音频文件添加到android模拟器[更新]权限被拒绝

database - 在数据库中存储图像 - 是还是否?