Android之外部存储(SD卡)
*手机的外部存储空间,这个我们可以理解成电脑的外接移动硬盘,U盘也行。所有的Android设备都有两个文件存储区域:“内部”和“外部”存储器。这两个名称来自早期的Android,当时大多数设备都提供内置的固定的内存(内置存储器)即ROM中的内部存储,外加一个可移动的存储介质,如micro SD卡(外部存储器)。但也有些设备把固定不变的存储空间分成“内部”和“外部”两部分,这样即使没有可移动的存储介质,也总会有两个存储空间,并且不管外部存储器是可移动的,还是固定的,API的行为是相同的。
* 路径: /mnt/sdcard/
*Environment类
getExternalStorageDirectory(); // 获取sd卡的路径
getExternalStorageState(); // 获取sd卡的状态
Environment.MEDIA_MOUNTED // 挂载状态
Environment.MEDIA_UNMOUNTED // 卸载状态
* 需要添加读写SD卡的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
// 检查SD卡是不插入和拔出 public boolean isSdMounted(View view) { String staus = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(staus)) { System.out.println("插入了SD卡"); return true; } else if (Environment.MEDIA_UNMOUNTED.equals(staus)) { System.out.println("SD卡被拔出了"); return false; } return false; } // 获取SD卡的路径 public String getSdPath(View v) { File file = Environment.getExternalStorageDirectory(); String path = file.getAbsolutePath(); return path; } // 获取SD卡可用空间 @SuppressLint("NewApi") public long getSdFreeSpace(View v) { File file = Environment.getExternalStorageDirectory(); return file.getFreeSpace(); // 格式化大小 }
package com.example.qq; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStreamReader; import android.os.Bundle; import android.app.Activity; import android.text.TextUtils; import android.view.Menu; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText etPwd; private EditText etQQ; private CheckBox cbRemPwd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); etPwd = (EditText) findViewById(R.id.et_pwd); etQQ = (EditText) findViewById(R.id.et_qq); cbRemPwd = (CheckBox) findViewById(R.id.cb_rem_pwd); readData(); } /** * 从文件中读取数据显示在界面上 */ private void readData() { File file = new File("/mnt/sdcard/waibu.txt"); try { FileInputStream fis = new FileInputStream(file); BufferedReader br = new BufferedReader(new InputStreamReader(fis)); String text = br.readLine(); String[] content = text.split("=="); String qq = content[0]; String pwd = content[1]; //把QQ号码和密码显示在文本输入框 etQQ.setText(qq); etPwd.setText(pwd); br.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 1. 获取用户输入的QQ号码和密码 * 2. 做非空判断 * 3. 如果用户勾选了复选框,用文件存储密码 */ public void gelogin(View v){ // System.out.println("点击了按钮"); String pwd = etPwd.getText().toString().trim(); String qq = etQQ.getText().toString().trim(); if(TextUtils.isEmpty(pwd) || TextUtils.isEmpty(qq)){ Toast.makeText(this, "亲,请输入QQ号码或者密码哦 :) ", 0).show(); return; } //判断用户是否勾选复选框 boolean checked = cbRemPwd.isChecked(); if (checked) { //用文件存储密码 try { File file = new File("/mnt/sdcard/waibu.txt"); FileOutputStream fos = new FileOutputStream(file); String text = qq+"=="+pwd; fos.write(text.getBytes()); //释放资源 fos.close(); Toast.makeText(this, "密码存储成功,/mnt/sdcard/waibu.txt", 0).show(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "存储失败了 :( ", 0).show(); } } } }
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!