更新:经过一些测试后我确定文件本身没有被创建,至少根据file.exists检查。有什么想法吗?
您好我正在尝试在我的应用程序退出时序列化一个arraylist并在它恢复时将其读回。它似乎没有创建文件。
这是我的代码。
protected void onPause() {
super.onPause();
if(!myArrayList.isEmpty())
{
final String FILENAME = "myfile.bin";
try{
FileOutputStream fos;
fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
//FileOutputStream fileStream = new FileOutputStream(FILENAME);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(myArrayList);
os.flush();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
@SuppressWarnings("unchecked")
@Override
protected void onResume() {
super.onResume();
File file = new File("myfile.bin");
if(file.exists()){
final String FILENAME="myfile.bin";
try{
FileInputStream fileStream = new FileInputStream(FILENAME);
ObjectInputStream os = new ObjectInputStream(fileStream);
myArrayList = (ArrayList<MyObject>)os.readObject();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}
有什么想法吗?我的MyObject类实现了serializable。
答案 0 :(得分:1)
通过将FileInputStream fileStream = new FileInputStream(FILENAME)
更改为FileInputStream fileStream= openFileInput(FILENAME)
来实现目标。
答案 1 :(得分:0)
os.writeObject(myArrayList);
os.flush();
os.close();
在writeObject之后立即尝试os.close(),它应该调用flush()。