Java 序列化对象
Java Serialization Object
对于我的 android 工作室项目,我需要序列化一个用户对象。这个想法是保存和加载这个对象,所以当应用程序关闭(被销毁)时,对象及其属性被保存并存储在一个文件中。我的问题是加载对象时出错。虽然我尝试创建它,但它说没有名为 'save.bin' 的文件或目录。这是我的代码:
public class SaveAndLoadManager{
public void save(Object object){
Log.d("Save", "saving object");
try{
File userInfo = new File("save.bin");
FileOutputStream fileOutputStream = new FileOutputStream(userInfo);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(object);
objectOutputStream.close();
Log.d("Save", "object saved");
}catch(FileNotFoundException e){
Log.e("Save", e.getMessage());
}catch(IOException e){
Log.e("Save", e.getMessage());
}
}
public Object load(){
Log.d("Load", "loading object");
Object object = null;
try{
FileInputStream fileInputStream = new FileInputStream("save.bin");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
object = objectInputStream.readObject();
objectInputStream.close();
Log.d("Load", "object loaded");
}catch(FileNotFoundException e){
Log.e("Load", e.getMessage());
}catch(StreamCorruptedException e){
Log.e("Load", e.getMessage());
}catch(Exception e){
Log.e("Load", e.getMessage());
}
return object;
}
}
如何正确创建目录?
假设 User
正在实施 Serialazible
File userInfo = new File("save.bin");
你可以想想上面这行,就像一个文件对象,叫做"save.bin",存储在根目录下,(/
)文件系统。您的应用程序无法写入此位置。您的应用程序具有两个写入位置的权限,一个存储在 /data/data/yourapp
下,另一个存储在 /sdcard/Android/data/yourapp
下。两者都应该通过 public api 访问。例如。您可以使用 openFileOutput/openFileInput 对来检索 FileOutputStream
/FileInputStream
FileOutputStream fileOutputStream = openFileOutput("save.bin", Context.MODE_PRIVATE)
FileInputStream fileInputStream = openFileInput("save.bin");
正如@androidLerner 在他的评论中提到的,
您可以找到更多信息 here、
对于我的 android 工作室项目,我需要序列化一个用户对象。这个想法是保存和加载这个对象,所以当应用程序关闭(被销毁)时,对象及其属性被保存并存储在一个文件中。我的问题是加载对象时出错。虽然我尝试创建它,但它说没有名为 'save.bin' 的文件或目录。这是我的代码:
public class SaveAndLoadManager{
public void save(Object object){
Log.d("Save", "saving object");
try{
File userInfo = new File("save.bin");
FileOutputStream fileOutputStream = new FileOutputStream(userInfo);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(object);
objectOutputStream.close();
Log.d("Save", "object saved");
}catch(FileNotFoundException e){
Log.e("Save", e.getMessage());
}catch(IOException e){
Log.e("Save", e.getMessage());
}
}
public Object load(){
Log.d("Load", "loading object");
Object object = null;
try{
FileInputStream fileInputStream = new FileInputStream("save.bin");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
object = objectInputStream.readObject();
objectInputStream.close();
Log.d("Load", "object loaded");
}catch(FileNotFoundException e){
Log.e("Load", e.getMessage());
}catch(StreamCorruptedException e){
Log.e("Load", e.getMessage());
}catch(Exception e){
Log.e("Load", e.getMessage());
}
return object;
}
}
如何正确创建目录?
假设 User
正在实施 Serialazible
File userInfo = new File("save.bin");
你可以想想上面这行,就像一个文件对象,叫做"save.bin",存储在根目录下,(/
)文件系统。您的应用程序无法写入此位置。您的应用程序具有两个写入位置的权限,一个存储在 /data/data/yourapp
下,另一个存储在 /sdcard/Android/data/yourapp
下。两者都应该通过 public api 访问。例如。您可以使用 openFileOutput/openFileInput 对来检索 FileOutputStream
/FileInputStream
FileOutputStream fileOutputStream = openFileOutput("save.bin", Context.MODE_PRIVATE)
FileInputStream fileInputStream = openFileInput("save.bin");
正如@androidLerner 在他的评论中提到的, 您可以找到更多信息 here、