数据存储的位置有两个:手机自带的存储空间(电脑的自带硬盘)和外存储设备(sdcard,移动硬盘,也有可能是固定在手机内部,用usb链接电脑后可以看到的存储设备)
当使用context的openFileOutput()来保存文件时,文件会被保存在手机自带的存储空间中,而且根据保存时操作模式的不同而权限不同。手机自带的存储空间通常较小,适合存放一些小的文件。大的文件通常存放在SDCard中,保存在SDCard中的文件是其他应用都能访问的。
SDCard使用方法:
第一步:添加SDCard使用权限
第二步:判断SDCard是否可用Environment.getExternalStorageState();
需要判断两个状态 是否安装了SDCard(MEDIA_MOUNTED);是否有写保护(MEDIA_MOUNTED_READONLY)
第三步:保存文件
File file = new File(“/mnt/sdcard”,filename);
FileOutputStream outStream = newFileOutputStream(file);
outStream.write(content.getBytes());
outStream.close();
在SDCard中创建文件时,文件目录通过Environment.getExternalStorageDirectory()获得可以屏蔽掉一些版本的差异。
数据存储的方式有五种:
1. 文件
实际上是用javaSE中的IO技术
1) 通过上下文对象context快速得到文件输出流对象
FileOutputStreamoutStream=context.openFileOutput(filename,mode);
outStream.write(str.getBytes());
Filename:输出流所写文件的文件名
Mode:权限控制及写入方式(追加,覆盖…)
eg:context.MODE_PRIVATE,私有操作模式:创建出来的文件只能被本应用使用,其他应用无法访问该文件,并且以覆盖方式写入
因为是字节输出流,所以要将写入内容转换成字节
通过这种方式,文件会被保存在data/data/packagename/files文件夹下面
2) 通过上下文对象context快速得到文件输出流对象
FileInputStream inStream=context.openFileInput(filename);
ByteArrayOutputStream outStream=new ByteArrayOutputStream();//字节数组输出流对象,用来缓存字节数组在内存中
Byte []buffer=new byte[1024];
While((len=inStream.read(buffer))!=-1)//读到文件结尾时read方法返回-1
{
outStream.write(buffer,0, len);
}
Byte [] data = outStream.toByteArray();
3) 创建文件时所使用的操作模式
Context.MODE_PRIVATE:默认操作模式,如上述。
Context.MODE_APPEND:追加操作模式,检查文件是否存在,存在就往文件末尾追加内容;若不存在ÿ