数据的几种存储方式
1.文件
2.SharedPreference
>当有一个或者多个配置信息需要保存
3.数据库(特殊的文件,带索引)
>当有大量的相似结构的数据要存放,并且实现增删改查,推荐使用数据库
4 使用ContentProvider存储数据
5 网络存储数据
例如保存账号和密码
Android应用程序的数据要保存在自己的文件夹里面
try{
//File file = new File("data/data/包名/info.txt");
//得到一个文件的输出流,文件的位置/data/data/包名/files/info.txt
/**File file = new File(getFilesDir(),"info.txt");
FileOutputStream fos = new FileOutputStream(file);*/
//上面两句可以这样写 0:默认私有(MODE_PRIVATE) MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE
FileOutputStream fos = openFileOutput("info.txt",0);//打开文件输出流
String info = account + "##" + pwd;
fos.write(info.getBytes());
fos.close();
}catch(Exception e){
e.printStackTrace();
}
文件创建出来默认是私有的
如果想创建别的权限的文件
openFileOutput("文件名","访问模式");
MODE_WORLD_READABLE 全局可读 别的应用程序可以读这个文件
MODE_WORLD_WRITEABLE 全局可写 别的应用程序可以写这个文件
MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE 全局可读可写 别的应用程序可以自由的访问这个文件
Linux操作系统的文件权限
- - - - - - - - - - 总共10位
0:代表的是文件的类型 d:目录 -:文件
1-3:当前用户对文件的访问权限
4-6:用户所在组的访问权限
7-9:其他用户文件的访问权限
drwxr-x--x
r:可读
w:可写
x:可执行
rwx rwx rwx
111 111 111
7 7 7
在Android操作系统中每个应用程序都是独立的用户
chmod change mode 修改模式
chmod 777 修改权限
----------------------------------------------------------------------------------------------------------
读取数据
根据原来保存的文件信息,把账号和密码读取出来
try{
//File file = new File("data/data/包名/info.txt");
File file = new File(getFilesDir(),"info.txt");
if(file.exists()&&file.length()>0){
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String info = br.readLine();
String account =info.split("##")[0];
String pwd =info.split("##")[1];
}
}catch(Exception e){
e.printStackTrace();
}
getFilesDir() //获取应用程序files目录 /data/data/包名/files files目录存放重要的应用程序数据,
手机不会自动清理files目录的文件
自动清理cache目录的文件
手机存储空间的划分:
手机内部存储
>容量有限,较小,价格比较贵,存储访问速度快
>file目录 cache目录
>不需要声明权限,默认的权限全部都是私有的,别的应用程序不可以访问,只有自己的应用程序可以访问
File dataFile = Environment.getDataDirectory();//数据内部存储空间
long dataSize = dataFile.getTotalSpace();//单位是byte
Formatter.formatFileSize(mContext,dataSize);//格式化数据大小 ,Mb,Gb等
手机外部存储
>容量大,可以更换,价格便宜
>sd卡
>读写声明权限
File sdFile = Environment.getExternalStorageDirectory();//外部存储空间
long sdSize = sdFile.getTotalSpace();
sd卡读写的操作:
向sd卡写一个视频文件
//检查sd卡的状态
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdFile = Environment.getExternalStorageDirectory();//外部存储空间
long sdSize = sdFile.getFreeSpace();
if(sdSize>5*1024*1024){
File file = new File(Environment.getExternalStorageDirectory(),System.currentTimemillis() + "aaa.3gp");
//生成视频文件,文件名“时间+aaa.3gp”
try{
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
for(int i=0;i<5*1024;i++){
fos.write(buffer);
}
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}else{
//sd卡空间不足
}
}else{
//sd卡被拔出或者是不可用
}
权限 : WRITE_EXTERNAL_STORAGE、READ_EXTERNAL_STORAGE
生成空的视频文件