文件读写操作
- Ram内存:运行内存,相当于电脑的内存
- Rom内存:内部存储空间,相当于电脑的硬盘
- sd卡:外部存储空间,相当于电脑的移动硬盘
在内部存储空间中读写文件
小案例:用户输入账号密码,勾选“记住账号密码”,点击登录按钮,登录的同时持久化保存账号和密码
1. 定义布局
2. 完成按钮的点击事件
弹土司提示用户登录成功
Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
3. 拿到用户输入的数据
判断用户是否勾选保存账号密码
CheckBox cb = (CheckBox) findViewById(R.id.cb); if(cb.isChecked()){ }
4. 开启io流把文件写入内部存储
直接开启文件输出流写数据
//持久化保存数据 File file = new File("data/data/com.itheima.rwinrom/info.txt"); FileOutputStream fos = new FileOutputStream(file); fos.write((name + "##" + pass).getBytes()); fos.close();
读取数据前先检测文件是否存在
if(file.exists())
读取保存的数据,也是直接开文件输入流读取
File file = new File("data/data/com.itheima.rwinrom/info.txt"); FileInputStream fis = new FileInputStream(file); //把字节流转换成字符流 BufferedReader br = new BufferedReader(new InputStreamReader(fis)); String text = br.readLine(); String[] s = text.split("##");
读取到数据之后,回显至输入框
et_name.setText(s[0]); et_pass.setText(s[1]);
- 应用只能在自己的包名目录下创建文件,不能到别人家去创建
使用路径api读写文件
- getFilesDir()得到的file对象的路径是data/data/com.itheima.rwinrom2/files
- 存放在这个路径下的文件,只要你不删,它就一直在
getCacheDir()得到的file对象的路径是data/data/com.itheima.rwinrom2/cache
- 存放在这个路径下的文件,当内存不足时,有可能被删除
系统管理应用界面的清除缓存,会清除cache文件夹下的东西,清除数据,会清除整个包名目录下的东西
在外部存储读写数据
sd卡的路径
- sdcard:2.3之前的sd卡路径
- mnt/sdcard:4.3之前的sd卡路径
storage/sdcard:4.3之后的sd卡路径
最简单的打开sd卡的方式
File file = new File("sdcard/info.txt");
写sd卡需要权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
读sd卡,在4.0之前不需要权限,4.0之后可以设置为需要
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
使用api获得sd卡的真实路径,部分手机品牌会更改sd卡的路径
Environment.getExternalStorageDirectory()
判断sd卡是否准备就绪
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))