利用serializable将对象保存到本地
2017-06-16 17:20
253 查看
以前保存本地我只会用到SQLite,xml和sp。
今天大佬突然说你不会归档吗?(大佬是ios的),我说什么是归档,结果一查,就是安卓的
序列化serializable
我以前只会在acitivity跳转传对象的时候才会用到serializable,原来serializable还有将对象保存本地的作用,具体思想就是将对象序列化之后,用file文件读写方式将序列化后的对象保存到外部存储,原理上还是用文件存储的方式。
用法:
1.首先声明一个类,这个类和里面的所有内部类都要implements serializable
public class VolunteerListBean implements Serializable{
private List<ConsulterListBean> consulterList;
public List<ConsulterListBean> getConsulterList() {
return consulterList;
}
public void setConsulterList(List<ConsulterListBean> consulterList) {
this.consulterList = consulterList;
}
public static class ConsulterListBean implements Serializable{
private String college;
private String major;
private String id;
public String getCollege() {
return college;
}
public void setCollege(String college) {
this.college = college;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
}
假设有一个志愿者数组的类,内部又有各个志愿者的类,它们都implements serializable
然后在activity中new出志愿者数组的对象,各种set get之后就可以调用存储方法了
//将志愿者按照学校名保存到本地
public void saveVolunteers(VolunteerListBean volunteerListBean, String schoolName) throws IOException, ClassNotFoundException {
String path = Constant.VOLUNTEERS_DIR + File.separator + schoolName + ".data";//设置路径
FileOutputStream fileOutputStream;//打开文件输出流
ObjectOutputStream objectOutputStream;//打开对象输出流
File file = new File(path);//新建文件
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
if (file.exists()) {
file.delete();
}
file.createNewFile();
fileOutputStream = new FileOutputStream(file.toString());//将新建的文件写入文件输出流
objectOutputStream = new ObjectOutputStream(fileOutputStream);//向对象输出流写入文件输出流
objectOutputStream.writeObject(volunteerListBean);//将序列化后的对象写入对象输出流
objectOutputStream.close();//关闭对象输出流
fileOutputStream.close();//关闭文件输出流
}
然后就能在对应的文件夹里面看到.data文件了
接着就是读文件了
//读取志愿者,根据学校名
public VolunteerListBean getVolunteers(String schoolName) throws IOException, ClassNotFoundException {
String path = Constant.VOLUNTEERS_DIR + File.separator + schoolName + ".data";//设置路径
VolunteerListBean volunteerListBean;//声明对象
File file = n
b36c
ew File(path);//新建文件
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
if (file.exists()) {
//如果文件存在
FileInputStream fileInputStream;//打开文件输入流
ObjectInputStream objectInputStream;//打开对象输入流
fileInputStream = new FileInputStream(file.toString());//将新建的文件写入文件输入流
objectInputStream = new ObjectInputStream(fileInputStream);//将文件输入流写入对象输入流
volunteerListBean = (VolunteerListBean) objectInputStream.readObject();//获取对象输入流的对象
objectInputStream.close();//关闭对象输入流
fileInputStream.close();//关闭文件输入流
return volunteerListBean;
} else {
return null;
}
}
下面还有个小tip,利用递归删除指定文件夹(包括里面所有文件)
//删除文件夹
public void deleteDir(File file){
if (file.isFile()) {
//如果是文件的话
file.delete();
return;
}
if (file.isDirectory()) {
//如果是文件夹的话
File[] childFile = file.listFiles();//获取这个文件夹里面的所有文件(包括文件夹)
if (childFile == null || childFile.length == 0) {
//如果这个文件夹没有子文件或者文件夹的话,就删除掉这个文件(文件夹)
file.delete();
return;
}
for (File f : childFile) {
//递归这个方法
deleteDir(f);
}
file.delete();//这个方法最后就是删除掉目标文件
}
}
今天大佬突然说你不会归档吗?(大佬是ios的),我说什么是归档,结果一查,就是安卓的
序列化serializable
我以前只会在acitivity跳转传对象的时候才会用到serializable,原来serializable还有将对象保存本地的作用,具体思想就是将对象序列化之后,用file文件读写方式将序列化后的对象保存到外部存储,原理上还是用文件存储的方式。
用法:
1.首先声明一个类,这个类和里面的所有内部类都要implements serializable
public class VolunteerListBean implements Serializable{
private List<ConsulterListBean> consulterList;
public List<ConsulterListBean> getConsulterList() {
return consulterList;
}
public void setConsulterList(List<ConsulterListBean> consulterList) {
this.consulterList = consulterList;
}
public static class ConsulterListBean implements Serializable{
private String college;
private String major;
private String id;
public String getCollege() {
return college;
}
public void setCollege(String college) {
this.college = college;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
}
假设有一个志愿者数组的类,内部又有各个志愿者的类,它们都implements serializable
然后在activity中new出志愿者数组的对象,各种set get之后就可以调用存储方法了
//将志愿者按照学校名保存到本地
public void saveVolunteers(VolunteerListBean volunteerListBean, String schoolName) throws IOException, ClassNotFoundException {
String path = Constant.VOLUNTEERS_DIR + File.separator + schoolName + ".data";//设置路径
FileOutputStream fileOutputStream;//打开文件输出流
ObjectOutputStream objectOutputStream;//打开对象输出流
File file = new File(path);//新建文件
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
if (file.exists()) {
file.delete();
}
file.createNewFile();
fileOutputStream = new FileOutputStream(file.toString());//将新建的文件写入文件输出流
objectOutputStream = new ObjectOutputStream(fileOutputStream);//向对象输出流写入文件输出流
objectOutputStream.writeObject(volunteerListBean);//将序列化后的对象写入对象输出流
objectOutputStream.close();//关闭对象输出流
fileOutputStream.close();//关闭文件输出流
}
然后就能在对应的文件夹里面看到.data文件了
接着就是读文件了
//读取志愿者,根据学校名
public VolunteerListBean getVolunteers(String schoolName) throws IOException, ClassNotFoundException {
String path = Constant.VOLUNTEERS_DIR + File.separator + schoolName + ".data";//设置路径
VolunteerListBean volunteerListBean;//声明对象
File file = n
b36c
ew File(path);//新建文件
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
if (file.exists()) {
//如果文件存在
FileInputStream fileInputStream;//打开文件输入流
ObjectInputStream objectInputStream;//打开对象输入流
fileInputStream = new FileInputStream(file.toString());//将新建的文件写入文件输入流
objectInputStream = new ObjectInputStream(fileInputStream);//将文件输入流写入对象输入流
volunteerListBean = (VolunteerListBean) objectInputStream.readObject();//获取对象输入流的对象
objectInputStream.close();//关闭对象输入流
fileInputStream.close();//关闭文件输入流
return volunteerListBean;
} else {
return null;
}
}
下面还有个小tip,利用递归删除指定文件夹(包括里面所有文件)
//删除文件夹
public void deleteDir(File file){
if (file.isFile()) {
//如果是文件的话
file.delete();
return;
}
if (file.isDirectory()) {
//如果是文件夹的话
File[] childFile = file.listFiles();//获取这个文件夹里面的所有文件(包括文件夹)
if (childFile == null || childFile.length == 0) {
//如果这个文件夹没有子文件或者文件夹的话,就删除掉这个文件(文件夹)
file.delete();
return;
}
for (File f : childFile) {
//递归这个方法
deleteDir(f);
}
file.delete();//这个方法最后就是删除掉目标文件
}
}
相关文章推荐
- golang利用gob序列化struct对象保存到本地
- 简单对象序列化保存本地示例
- 如何利用asp保存远程网页中的图片到本地来!
- 利用HTML5的Video进行视频截图并保存到本地
- 利用 FastCoding 将对象进行本地持久化
- 利用 FastCoding 将对象进行本地持久化
- 图片自动保存到本地并利用aspjpeg为图片加水印
- 利用html5的本地存储功能实现登录用户信息保存
- C#利用webrequest 通过图片src保存到本地
- Android中JNI高级应用 - 本地C代码中创建Java对象及本地JNI对象的保存
- 利用 FastCoding 将对象进行本地持久化
- 如何利用asp保存远程网页中的图片到本地来!
- 利用对象序列化将购物车保存在Cookie中
- 图片自动保存到本地并利用aspjpeg为图片加水印
- Android中JNI高级应用 - 本地C代码中创建Java对象及本地JNI对象的保存
- C# 利用系统剪贴板 保存 自定义对象
- 利用robot类实现截屏并保存到本地
- 利用dom4j创建xml文件并保存到本地实例
- Android中JNI高级应用 - 本地C代码中创建Java对象及本地JNI对象的保存
- 安卓用SharedPreferences保存对象到本地和取出方法