数据存储之文件读写

数据的几种存储方式
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目录的文件

getCacheDir(); /data/data/包名/cache cache目录存放临时的不重要的数据,这个目录有一个特点,当手机内存空间不足的时候会
自动清理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
生成空的视频文件




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值