手机的存储空间分俩种,一种是手机自带的,另一种是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();
}