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();
			}
		}
		
	}
	
}

 


 

posted on 2017-02-22 20:20  LoaderMan  阅读(732)  评论(0编辑  收藏  举报

导航