我是一只刚入坑的萌新……
最近写了个程序,其中需要保存很多不同种类的数据,于是就用ObjectOutputStream和ObjectInputStream保存了一个类,也能够正常读取,但发现一个问题,当软件重新安装(如版本升级)后,就无法读取以前保存下来的类了!(我是保存在SD卡中的,data文件也没有丢失)然后再用新的软件保存数据,又可以正常读取。搞不懂啊!我也没有改版本和签名,包名也一样,是一个软件,为什么重装后就不能读取了?求大神解答!!
最好帖一下关键代码,还有不能正常读取有报什么异常信息吗?最好也把这关系的信息发出来。
public class DataUtils
{
private static DataUtils mDataUtils;
public final static String sdcard=Environment.getExternalStorageDirectory().getAbsolutePath();
private HashMap mObjectMap=new HashMap();
public final static String path=sdcard+"/.com.hider/";
public synchronized static DataUtils getDataUtils() {
if(mDataUtils == null) {
mDataUtils=new DataUtils();
}
return mDataUtils;
}
private DataUtils() {
if(!new File(sdcard+"/.com.hider/").exists()) {
new File(sdcard+"/.com.hider/").mkdir();
}
}
public void putData(String key, String content) {
mStringMap.put(key, content);
}
public String getData(String key) {
return mStringMap.get(key);
}
public void putObject(String key, Object content) {
mObjectMap.put(key, content);
}
public Object getObject(String key) {
return mObjectMap.get(key);
}
public static void saveData() {
if(!new File(path).exists()) {
new File(path).mkdir();
}
try
{
FileOutputStream output=new FileOutputStream(path + "data");
ObjectOutputStream objectoutput=new ObjectOutputStream(output);
objectoutput.writeObject(mDataUtils);
objectoutput.close();
}
catch (Exception e)
{}
}
public static void loadData() {
if(!new File(path+"data").exists()) {
return;
}
try
{
FileInputStream input=new FileInputStream(path + "data");
ObjectInputStream objectinput=new ObjectInputStream(input);
mDataUtils=(DataUtils) objectinput.readObject();
objectinput.close();
}
catch (Exception e)
{}
}
}
你保存的数据,你可以在下次保存前去读出来,看看还有木有
为什么要这么麻烦呢,直接用sqllite或者是SharedPreferences不久好了么,你这太麻烦了
流的写入读出都是固定代码不会出错。
有问题的话 应该 是 每次读的时候看下文件父目录是否创建、文件是否存在,打log判断下