保存到文件矢量矢量

时间:2013-12-29 16:09:22

标签: android file object vector storage

我正在写信给你一个我无法解决的问题。 我有一个矢量矢量。

Vector<Vector<Item>> vectorItem;

我不知道如何将其保存到文件中,之后如何加载。

我试试这个:

public void save(String name, Context ctx, Vector<Vector<Item>> vectorItem) {
        try {
            String sdCard = Environment.getExternalStorageDirectory().toString();
            File dir = new File(sdCard + "/dir");
            File file = new File(dir.getAbsolutePath(), name);
            if(!file.exists()) {
                file.createNewFile();
            }
            FileOutputStream fos = ctx.openFileOutput(name, Context.MODE_PRIVATE);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(vectorItem);
            oos.close();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
    }

    public Vector<Vector<Item>> load(String name, Context ctx) {        
        Vector<Vector<Item>> vectorItem; = null;
        String sdCard = Environment.getExternalStorageDirectory().toString();
        File dir = new File(sdCard + "/dir");
        try {
            FileInputStream fis = ctx.openFileInput(name);
            ObjectInputStream ois = new ObjectInputStream(fis);
            vectorItem = (Vector<Vector<Item>>) ois.readObject();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        catch(ClassNotFoundException e) {
            e.printStackTrace();
        }
        return vectorSezioni;
    }

但这是错误: 12-29 16:57:07.140:W / System.err(32681):java.io.IOException:open failed:ENOENT(没有这样的文件或目录)

1 个答案:

答案 0 :(得分:2)

首先,您必须保证拥有WRITE_EXTERNAL_STORAGE权限,因为您正在写入SD卡。

致电

之前
File file = new File(dir.getAbsolutePath(), name);

你应该致电

dir.mkdirs();

确保创建目录。

然后,在将对象写入输出流之后,必须刷新它以便在关闭之前写入所有数据

oos.flush();

反序列化方法应该考虑目录和文件名:

public Vector<Vector<Item>> load(String name, Context ctx) {        
    Vector<Vector<Item>> vectorItem; = null;
    String sdCard = Environment.getExternalStorageDirectory().toString();
    File dir = new File(sdCard + "/dir");
    File file = new File(dir.getAbsolutePath(), name);
    try {
        FileInputStream fis = ctx.openFileInput(file);
        ObjectInputStream ois = new ObjectInputStream(fis);
        vectorItem = (Vector<Vector<Item>>) ois.readObject();
    }
    catch(IOException e) {
        e.printStackTrace();
    }
    catch(ClassNotFoundException e) {
        e.printStackTrace();
    }
    return vectorSezioni;
}

希望它有所帮助。