数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是:
1 使用SharedPreferences存储数据
2 文件存储数据
3 SQLite数据库存储数据
4 使用ContentProvider存储数据
5 网络存储数据
这一篇介绍文件存储,其实说白了是Android的文件存储不如说是java的io流的操作。但是也有些需要注意的地方,比如读写模式,和对象权限的问题等。
把文件存入SDCard:
使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。对于像视频这样的大文件,我们可以把它存放在SDCard。
SDCard是干什么的?你可以把它看作是移动硬盘或U盘。 在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件)。
创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下: 在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard,文件后缀可以随便取,建议使用.img: mksdcard 2048M D:\AndroidTool\sdcard.img 在程序中访问SDCard,你需要申请访问SDCard的权限。
在AndroidManifest.xml中加入访问SDCard的权限如下:
< uses-permission android:name ="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 往SDCard写入数据权限 -->
< uses-permission android:name ="android.permission.WRITE_EXTERNAL_STORAGE" />
对文件的读写方法如下
public String getFileFromSdcard(String fileName) {
FileInputStream inputStream = null;
// 缓存的流,和磁盘无关,不需要关闭
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
File file = new File(Environment.getExternalStorageDirectory(),
fileName);
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
//getExternalStorageState() returns MEDIA_MOUNTED
//if the media is present and mounted at its mount point with read/write access
//上面的英文就是官网的解释,意思就是存在sdcard 并且可以读写就返回 MEDIA_MOUNTED
try {
inputStream = new FileInputStream(file);
int len = 0;
byte[] data = new byte[1024];
while ((len = inputStream.read(data)) != -1) {
outputStream.write(data, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return new String(outputStream.toByteArray());
}
/**
* @param fileName
* 文件的名称
* @param content
* 文件的内容
* @return
*/
public boolean saveContentToSdcard(String fileName, String content) {
boolean flag = false;
FileOutputStream fileOutputStream = null;
// 获得sdcard卡所在的路径
File file = new File(Environment.getExternalStorageDirectory(),
fileName);
// 判断sdcard卡是否可用
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
try {
fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(content.getBytes());
flag = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return flag;
}