手机的存储空间分俩种,一种是手机自带的,另一种是SD卡,(外存)
文件保存
FileOutputStream fOutputStream =
context.openFileOutput(filename, Context.MODE_PRIVATE);
fOutputStream.write(content.getBytes());
openFileOutput()方法的第一个参数用于指定文件名称,不能包含路径分隔符"/",如果文件不存在,Android会自动创建它,创建的文件保存在/data/data/<package name>files目录
openFileOutput()方法的第二个参数用于指定操作模式,有四种模式,分别为:
Context.MODE_PRIVATE=0
Context.MODE_APPEND =32768
Context.MODE_WORLD_READABLE=1
Context.MODE_WORLD_WRITEABLE=2
文件读取
public String readFile(String filename)throws Exception{
FileInputStream input = context.openFileInput(filename);
//定义的缓冲区
byte[] bytes = new byte[1024];
int len = 0;
//写入文件到内存
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
while((len=input.read(bytes))!=-1){
//把缓冲区中 的数据从0位置开始,读取len长度,写入内存
outputStream.write(bytes,0,len);
}
byte[] data = outputStream.toByteArray();
outputStream.close();
input.close();
return new String(data);
}
文件操作模式
Context.MODE_PRIVATE,为默认操作模式,代表文件是私有数据,只能被应用本身访问,在改模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否具有权限读写该文件。
MOED_WORLD_READABLE:表示当前文件可以被其他应用读取
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入
快速定位文件,在activity中使用this.getFilesDir()
文件在SD卡存储
android2.2之前,SD卡在/sdcard目录
android2.2和之后,SD卡在/mnt/sdcard
使用activity的openFileOutput()方法保存文件,文件是存在手机空间上,一般手机的存储空间不是很大,存放些小文件还可以,如果要存储视频等大文件,是不可行的,对于像视频这样的大文件,我们存储在SD卡
在程序中访问SD卡,需要加入权限
<!--在SD卡中创建于删除文件的权限-->
<android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!--往SD卡中写入数据权限-->
<android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//判断是否存在SD卡,是否可写
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//保存
fileService.saveToSDCard(filenameString, context);
}
public void saveToSDCard(String filename,String content)throws Exception{
File file = new File(Environment.getExternalStorageDirectory(),filename);
FileOutputStream fOutputStream =
new FileOutputStream(file);
fOutputStream.write(content.getBytes());
fOutputStream.close();
}