利用serializable将对象保存到本地
来源:互联网 发布:php 获取图片拍摄地点 编辑:程序博客网 时间:2024/06/07 23:35
以前保存本地我只会用到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;
}
}
}
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();//关闭文件输出流
}
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 = new 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;
}
}
public VolunteerListBean getVolunteers(String schoolName) throws IOException, ClassNotFoundException {
String path = Constant.VOLUNTEERS_DIR + File.separator + schoolName + ".data";//设置路径
VolunteerListBean volunteerListBean;//声明对象
File file = new 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();//这个方法最后就是删除掉目标文件
}
}
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();//这个方法最后就是删除掉目标文件
}
}
阅读全文
0 0
- 利用serializable将对象保存到本地
- Android保存Serializable数据到本地
- IOS将ALAsset对象中数据保存到本地文件夹
- 将PrivateKey保存到本地
- 将log保存到本地
- 将图片保存到本地
- NSKeyedArchiver保存对象到本地
- Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)
- Swift - 本地数据的保存与读取(使用NSCoder将对象保存到.plist文件)
- Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)
- 将bitmap对象保存到本地,返回保存的图片路径
- 将对象保存到文件
- 利用js保存图片到本地
- FP10直接将图片保存到本地
- 将项目中的资源保存到本地
- mysql 将远程数据保存到本地
- MSSQLServer将远端数据库保存到本地
- C# 将二进制字符串保存到本地
- rsync+inotify-tools实时同步真正可用版
- Android onNewIntent()需要注意的一些问题
- day10 ARM伪指令、ARM混合调用
- day11 ARM混合调用案例、ARM核 异常处理流程、软件处理异常
- Android安装APK详解
- 利用serializable将对象保存到本地
- 数据结构与算法汇总
- unity c#调用c++ dll相关技术细节整理
- jquery与JavaScript部分使用区别
- WMI技术介绍和应用——WMI概述
- ESC/POS协议打印机工具类(java)
- js匹配正则
- 创建守护进程
- c++ 实现一个简单的k-v数据黑板