赞
踩
Android中能够被保存的对象都是被序列化过的对象。
请参考:
Android-存储:SharedPreferences使用及其存储类型
存入的对象必须序列化, 实现Serializable接口, 然后用对象流进行IO操作.
在Android平台下,一个应用程序中所有的数据都是私有的。
当应用程序被安装到系统中后,其所在的包会有一个文件夹用于存放自己的数据,只有这个应用程序才有对这个文件夹的写入权限,这个私有的文件夹位于Android系统的/data/data/<应用程序包名>目录下,其他的应用程序都无法再这个文件夹中写入数据。除了存放私有的数据文件夹外,应用程序也具有SD卡的写入权限。
使用文件I/O 方法可以直接往手机中存储数据,默认情况下这些文件不可以被其他的应用程序访问。Android平台支持 java平台下的 文件I/O操作, 主要使用FileInputStream 和 FileOutputStream 这两个类来实现文件的存储与读取。获取这两个类对象的方式有两种。
一:第一种方式就是像Java平台下的实现方式一样通过构造器直接创建,如果需要向打开的文件末尾写入数据,可以通过使用构造器FileOutputStream(File file, boolean append)将 append设置为true来实现。不过需要注意的是采用这种方式获得FileOutputStream 对象时如果文件不存在或不可写入时,会抛出 FileNotFoundException 异常。
二:第二种获取 FileInputStream 和 FileOutputStream 对象的方式是调用 Context.openFileInput 和 Context.openFileOutput两个方法来创建。
/* 第一个参数,代表文件名称,注意这里的文件名称不能包括任何的/或者/这种分隔符,只能是文件名
* 该文件会被保存在/data/data/应用名称/files/xxx.txt
* 第二个参数,代表文件的操作模式
* MODE_PRIVATE 私有(只能创建它的应用访问) 重复写入时会文件覆盖
* MODE_APPEND 私有 重复写入时会在文件的末尾进行追加,而不是覆盖掉原来的文件
* MODE_WORLD_READABLE 公用 可读
* MODE_WORLD_WRITEABLE 公用 可读写
* */
FileOutputStream outputStream = openFileOutput(fileName,Activity.MODE_PRIVATE);
android应用私有存储文件的写入与读取-openFileInput 和 openFileOutput
Android存储对象到本地(SharedPreferences方式和file方式)
1、gson、fastjson、Jackson等将对象转为字符串进行保存
2、使用java流操作
package com.example.draggridview;
import android.content.Context;
import android.os.Environment;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.List;
/**
* Created by Administrator on 2017/6/19.
*/
public class OutputUtil<T> {
/**
* 将对象保存到本地
*
* @param context
* @param fileName 文件名
* @param bean 对象
* @return true 保存成功
*/
public boolean writeObjectIntoLocal(Context context, String fileName, T bean) {
try {
// 通过openFileOutput方法得到一个输出流,方法参数为创建的文件名(不能有斜杠),操作模式
FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_WORLD_READABLE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(bean);//写入
fos.close();//关闭输入流
oos.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
//Toast.makeText(WebviewTencentActivity.this, "出现异常1",Toast.LENGTH_LONG).show();
return false;
} catch (IOException e) {
e.printStackTrace();
//Toast.makeText(WebviewTencentActivity.this, "出现异常2",Toast.LENGTH_LONG).show();
return false;
}
}
/**
* 将对象写入sd卡
*
* @param fileName 文件名
* @param bean 对象
* @return true 保存成功
*/
public boolean writObjectIntoSDcard(String fileName, T bean) {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File sdCardDir = Environment.getExternalStorageDirectory();//获取sd卡目录
File sdFile = new File(sdCardDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(sdFile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(bean);//写入
fos.close();
oos.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
} else {
return false;
}
}
/**
* 将集合写入sd卡
*
* @param fileName 文件名
* @param list 集合
* @return true 保存成功
*/
public boolean writeListIntoSDcard(String fileName, List<T> list) {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File sdCardDir = Environment.getExternalStorageDirectory();//获取sd卡目录
File sdFile = new File(sdCardDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(sdFile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(list);//写入
fos.close();
oos.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
} else {
return false;
}
}
}
package com.example.draggridview;
import android.content.Context;
import android.os.Environment;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.OptionalDataException;
import java.io.StreamCorruptedException;
import java.util.List;
/**
* Created by Administrator on 2017/6/19.
*/
public class InputUtil<T> {
/**
* 读取本地对象
*
* @param context
* @param fielName 文件名
* @return
*/
@SuppressWarnings("unchecked")
public T readObjectFromLocal(Context context, String fielName) {
T bean;
try {
FileInputStream fis = context.openFileInput(fielName);//获得输入流
ObjectInputStream ois = new ObjectInputStream(fis);
bean = (T) ois.readObject();
fis.close();
ois.close();
return bean;
} catch (StreamCorruptedException e) {
//Toast.makeText(ShareTencentActivity.this,"出现异常3",Toast.LENGTH_LONG).show();//弹出Toast消息
e.printStackTrace();
return null;
} catch (OptionalDataException e) {
//Toast.makeText(ShareTencentActivity.this,"出现异常4",Toast.LENGTH_LONG).show();//弹出Toast消息
e.printStackTrace();
return null;
} catch (FileNotFoundException e) {
//Toast.makeText(ShareTencentActivity.this,"出现异常5",Toast.LENGTH_LONG).show();//弹出Toast消息
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (ClassNotFoundException e) {
//Toast.makeText(ShareTencentActivity.this,"出现异常6",Toast.LENGTH_LONG).show();//弹出Toast消息
e.printStackTrace();
return null;
}
}
/**
* 读取sd卡对象
*
* @param fileName 文件名
* @return
*/
@SuppressWarnings("unchecked")
public T readObjectFromSdCard(String fileName) {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { //检测sd卡是否存在
T bean;
File sdCardDir = Environment.getExternalStorageDirectory();
File sdFile = new File(sdCardDir, fileName);
try {
FileInputStream fis = new FileInputStream(sdFile);
ObjectInputStream ois = new ObjectInputStream(fis);
bean = (T) ois.readObject();
fis.close();
ois.close();
return bean;
} catch (StreamCorruptedException e) {
e.printStackTrace();
return null;
} catch (OptionalDataException e) {
e.printStackTrace();
return null;
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
} else {
return null;
}
}
/**
* 读取sd卡对象
*
* @param fileName 文件名
* @return
*/
@SuppressWarnings("unchecked")
public List<T> readListFromSdCard(String fileName) {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { //检测sd卡是否存在
List<T> list;
File sdCardDir = Environment.getExternalStorageDirectory();
File sdFile = new File(sdCardDir, fileName);
try {
FileInputStream fis = new FileInputStream(sdFile);
ObjectInputStream ois = new ObjectInputStream(fis);
list = (List<T>) ois.readObject();
fis.close();
ois.close();
return list;
} catch (StreamCorruptedException e) {
e.printStackTrace();
return null;
} catch (OptionalDataException e) {
e.printStackTrace();
return null;
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
} else {
return null;
}
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。