我正在写信给你一个我无法解决的问题。 我有一个矢量矢量。
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(没有这样的文件或目录)
答案 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;
}
希望它有所帮助。