常用文件路径: getFilesDir(); /data/data/包名/files getCacheDir(); /data/data/包名/cache openFileInput("itheima.txt"); /data/data/包名/files/itheima.txt openFileOutput("itheima.txt", Context.MODE_PRIVATE);
public class MainActivity extends Activity { private static final String Tag = "MainActivity"; private EditText et_qq; private EditText et_pwd; private CheckBox cb_remember; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //查询关心的控件 et_qq = (EditText) findViewById(R.id.et_qq); et_pwd = (EditText) findViewById(R.id.et_pwd); cb_remember = (CheckBox) findViewById(R.id.cb_remember); Log.i(Tag,"oncreate 被调用"); //完成数据的回显。 readSavedData(); } //读取保存的数据 private void readSavedData() { // getFilesDir() == /data/data/包名/files/ 获取文件的路径 一般系统是不会清理的。 用户手工清理,系统会有提示。 // getCacheDir()== /data/data/包名/cache/ 缓存文件的路径 当系统内存严重不足的时候 系统会自动的清除缓存 用户手工清理系统没有提示 File file = new File(getFilesDir(),"info.txt"); if(file.exists()&&file.length()>0){ try { //FileInputStream fis = new FileInputStream(file); FileInputStream fis =this.openFileInput("info.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fis)); //214342###abcdef String info = br.readLine(); String qq = info.split("###")[0]; String pwd = info.split("###")[1]; et_qq.setText(qq); et_pwd.setText(pwd); fis.close(); } catch (Exception e) { e.printStackTrace(); } } } /** * 登陆按钮的点击事件,在点击事件里面获取数据 * @param view */ public void login(View view){ String qq = et_qq.getText().toString().trim(); String pwd = et_pwd.getText().toString().trim(); if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(pwd)){ Toast.makeText(this, "qq号码或者密码不能为空", 0).show(); return; } //判断用户是否勾选记住密码。 if(cb_remember.isChecked()){ //保存密码 Log.i(Tag,"保存密码"); try { // File file = new File(getFilesDir(),"info.txt"); // FileOutputStream fos = new FileOutputStream(file); FileOutputStream fos = this.openFileOutput("info.txt", 0); //214342###abcdef fos.write((qq+"###"+pwd).getBytes()); fos.close(); Toast.makeText(this, "保存成功", 0).show(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "保存失败", 0).show(); } }else{ //无需保存密码 Log.i(Tag,"无需保存密码"); } } }
File file = new File(Environment.getExternalStorageDirectory(),"info.txt"); 获取得到的目录:mnt/data、sdcard|sdcard0... 厂商的不遵守规范导致获取得到的路径可能是虚拟的路径。 检测sd卡的状态: String status = Environment.getExternalStorageState(); if(Environment.MEDIA_MOUNTED.equals(status)){ //判断sd卡的可用空间 File file = Environment.getExternalStorageDirectory(); long freespace = file.getFreeSpace();//bytes String info = Formatter.formatFileSize(this, freespace); Toast.makeText(this, "sd卡可用,剩余空间:"+info, 0).show(); }else{ Toast.makeText(this, "sd卡不可用,不可以读写数据", 0).show(); } SharedPreferences生成一个xml布局文件