*手机的外部存储空间,这个我们可以理解成电脑的外接移动硬盘,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"/>

  1. // 检查SD卡是不插入和拔出
  2. public boolean isSdMounted(View view) {
  3. String staus = Environment.getExternalStorageState();
  4. if (Environment.MEDIA_MOUNTED.equals(staus)) {
  5. System.out.println("插入了SD卡");
  6. return true;
  7. } else if (Environment.MEDIA_UNMOUNTED.equals(staus)) {
  8. System.out.println("SD卡被拔出了");
  9. return false;
  10. }
  11. return false;
  12. }
  13.  
  14. // 获取SD卡的路径
  15. public String getSdPath(View v) {
  16. File file = Environment.getExternalStorageDirectory();
  17. String path = file.getAbsolutePath();
  18. return path;
  19. }
  20.  
  21. // 获取SD卡可用空间
  22. @SuppressLint("NewApi")
  23. public long getSdFreeSpace(View v) {
  24. File file = Environment.getExternalStorageDirectory();
  25. return file.getFreeSpace();
  26. // 格式化大小
  27. }
  1. package com.example.qq;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileOutputStream;
  8. import java.io.InputStreamReader;
  9.  
  10. import android.os.Bundle;
  11. import android.app.Activity;
  12. import android.text.TextUtils;
  13. import android.view.Menu;
  14. import android.view.View;
  15. import android.widget.CheckBox;
  16. import android.widget.EditText;
  17. import android.widget.Toast;
  18.  
  19. public class MainActivity extends Activity {
  20.  
  21. private EditText etPwd;
  22. private EditText etQQ;
  23. private CheckBox cbRemPwd;
  24.  
  25. @Override
  26. protected void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.activity_main);
  29. etPwd = (EditText) findViewById(R.id.et_pwd);
  30. etQQ = (EditText) findViewById(R.id.et_qq);
  31. cbRemPwd = (CheckBox) findViewById(R.id.cb_rem_pwd);
  32.  
  33. readData();
  34. }
  35.  
  36. /**
  37. * 从文件中读取数据显示在界面上
  38. */
  39. private void readData() {
  40. File file = new File("/mnt/sdcard/waibu.txt");
  41. try {
  42. FileInputStream fis = new FileInputStream(file);
  43. BufferedReader br = new BufferedReader(new InputStreamReader(fis));
  44. String text = br.readLine();
  45. String[] content = text.split("==");
  46. String qq = content[0];
  47. String pwd = content[1];
  48. //把QQ号码和密码显示在文本输入框
  49. etQQ.setText(qq);
  50. etPwd.setText(pwd);
  51. br.close();
  52. } catch (Exception e) {
  53. e.printStackTrace();
  54. }
  55.  
  56. }
  57.  
  58. /**
  59. * 1. 获取用户输入的QQ号码和密码
  60. * 2. 做非空判断
  61. * 3. 如果用户勾选了复选框,用文件存储密码
  62. */
  63. public void gelogin(View v){
  64. // System.out.println("点击了按钮");
  65. String pwd = etPwd.getText().toString().trim();
  66. String qq = etQQ.getText().toString().trim();
  67. if(TextUtils.isEmpty(pwd) || TextUtils.isEmpty(qq)){
  68. Toast.makeText(this, "亲,请输入QQ号码或者密码哦 :) ", 0).show();
  69.  
  70. return;
  71. }
  72. //判断用户是否勾选复选框
  73. boolean checked = cbRemPwd.isChecked();
  74. if (checked) {
  75. //用文件存储密码
  76. try {
  77. File file = new File("/mnt/sdcard/waibu.txt");
  78. FileOutputStream fos = new FileOutputStream(file);
  79. String text = qq+"=="+pwd;
  80. fos.write(text.getBytes());
  81. //释放资源
  82. fos.close();
  83. Toast.makeText(this, "密码存储成功,/mnt/sdcard/waibu.txt", 0).show();
  84. } catch (Exception e) {
  85. e.printStackTrace();
  86. Toast.makeText(this, "存储失败了 :( ", 0).show();
  87. }
  88. }
  89.  
  90. }
  91.  
  92. }

Android之外部存储(SD卡)的更多相关文章

  1. Android——数据存储:手机外部存储 SD卡存储

    xml <EditText android:layout_width="match_parent" android:layout_height="wrap_cont ...

  2. [android] 保存文件到SD卡

    /****************2016年5月4日 更新*****************************/ 知乎:为什么很多Android应用要把文件写到/sdcard目录下而不是写到/d ...

  3. android 写文件到sd卡问题小记

    android 写文件到sd卡问题小记 事情是这样子的.... 这天我开始编写项目调试工具,高大上不?-----其实就是记录实时网络请求和崩溃日志相关等的小工具(此处一个会心的微笑). 然后我是这样写 ...

  4. Android中播放本地SD卡中歌曲须要的加入的权限

    使用MediaPlayer播放本地Mp3文件时.须要注意的訪问路径的问题以及訪问权限的问题. 1.訪问路径:/storage/emulated/0 此路径即为手机的根路径,能够通过下载ES文件浏览器软 ...

  5. android 建数据库 SQLite 存储sd 卡或者内存

    android 创建数据库调用SQLiteOpenHelper,一般不直接操作SQLiteDatabase . 是通过SQLiteOpenHelper来获取 public class DBOpenHe ...

  6. Android 存储(本地存储 SD卡存储 SharedPreference SQLite ContentProvider)

    本文出自:http://blog.csdn.net/dt235201314/article/details/73176149 源码下载欢迎Star(updating):https://github.c ...

  7. Android 在外部存储读写文件

    本文主要介绍android中如何在外部存储读写数据 sd卡的路径 sdcard:2.3之前的sd卡路径 mnt/sdcard:4.3之前的sd卡路径 storage/sdcard:4.3之后的sd卡路 ...

  8. 转 Android:文件下载和写入SD卡学习小结

    转自 http://blog.csdn.net/zzp_403184692/article/details/8160739  一.文件下载  Android开发中,有时需要从网上下载一些资源以供用户使 ...

  9. Android -- 创建数据库到SD卡

    SQLite 系统自带的SQLite是通过SQLiteOpenHelper实现的,而SQLiteOpenHelper是将数据库存储到/data/data/包名/databasas,这样做的话在没有ro ...

随机推荐

  1. django请求周期和请求信息

    Django的请求周期 1,概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页. 那么: Djan ...

  2. Django—logging日志

    简介 Django使用python自带的logging 作为日志打印工具.简单介绍下logging. logging 是线程安全的,其主要由4部分组成: Logger 用户使用的直接接口,将日志传递给 ...

  3. CAFFE(一):Ubuntu 下安装CUDA(安装:NVIDIA-384+CUDA9.0+cuDNN7.1)

    (安装:NVIDIA-384+CUDA9.0+cuDNN7.1) 显卡(GPU)驱动:NVIDIA-384 CUDA:CUDA9.0 cuDNN:cuDNN7.1 Ubuntu 下安装CUDA需要装N ...

  4. List去重比较

    import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedHashSet; import java.ut ...

  5. hivesql中的concat函数,concat_ws函数,concat_group函数之间的区别

    一.CONCAT()函数CONCAT()函数用于将多个字符串连接成一个字符串.使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为 +---- ...

  6. asyncio模块实现线程的嵌套和穿插

    import asyncio import time now = lambda :time.time() async def cpc_1(x): print('正在烙比萨饼,预计{}分钟'.forma ...

  7. ios的uc浏览器图片加载不出来原因

    最近做一个落地页发现一个在ios设备上uc浏览器的bug 在uc浏览器开启广告过滤的时候,会把图片过滤掉,无论是背景图还是img标签加载的图片 经过搜索与实验,发现广告过滤的设置关掉就可以,可是一般情 ...

  8. ACM-ICPC 2017 西安赛区现场赛 A. XOR(线性基+线段树)

    题目链接:https://nanti.jisuanke.com/t/20749 参考题解:https://blog.csdn.net/Lee_w_j__/article/details/8266418 ...

  9. mybatis注解大全

    注解 目标 相对应的 XML 描述 @CacheNamespace 类 <cache> 为给定的命名空间 (比如类) 配置缓存. 属性:implemetation,eviction, fl ...

  10. Laravel中Contracts的理解和使用

    Laravel 的 Contracts 是一组定义了框架核心服务的接口.说白了就是一组接口.使用它就是为了降低耦合性. 即便如此,是不是也有同学会搞不清楚Contracts在lavarel体系中的到底 ...