簡體   English   中英

如何在Android中進行序列化和反序列化?

[英]How to serialize and deserialize in android?

我的mainActivity有一個ListView,應該顯示我的CustomList:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;

public class CustomList implements Serializable {
    private static final long serialVersionUID = 1L;
    private ArrayList<Game> list = new ArrayList<Game>();
    public void add(Game toAdd){
        list.add(toAdd);
    }
    public Game get(int id){
        return list.get(id);
    }
    public ArrayList<Game> getList(){
        return list;
    }
    public void serialize(){
        try {
            FileOutputStream fo = new FileOutputStream("res\\data.dat");
            ObjectOutputStream ou = new ObjectOutputStream(fo);
            ou.writeObject(list);
            ou.close();
            fo.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void deserialize(){
        try {
            FileInputStream fi = new FileInputStream("res\\data.dat");
            ObjectInputStream oi = new ObjectInputStream(fi);
            list = (ArrayList<Game>)oi.readObject();
            oi.close();
            fi.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

嘗試序列化或反序列化時出現以下錯誤:

java.io.FileNotFoundException: res\data.dat: open failed: ENOENT (No such file or directory)

我的問題是如何正確指向我的data.dat文件。 提前致謝

您無法寫入res目錄(只讀),而必須寫入其他地方,例如寫入緩存目錄(如果只是臨時的;請使用context.getCacheDir()來獲取其位置)或某個永久目錄空間(例如context.getFilesDir() )。

您可以像這樣獲取文件位置,並將其傳遞給FileOutputStream或FileInputStream的構造函數:

File file = new File(context.getFilesDir(), "data.dat");

如果選擇這樣做,您可能還需要請求權限才能寫入外部存儲。

在此處閱讀有關在Android中存儲文件的更多信息: http : //developer.android.com/training/basics/data-storage/files.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM