1.效果如下所示:

2.读写SD卡时,需要给APP添加读写外部存储设备权限,修改AndroidManifest.xml,添加:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

如下图所示:

3.读写SD卡需要用到的Environment类

Environment类是一个提供访问环境变量的类.

Environment类常用的方法有:

static File getRootDirectory();  //获取根目录,默认位于:/system
static File getDataDirectory(); //获取data目录,默认位于:/data
static File getDownloadCacheDirectory(); //获取下载文件的缓存目录,默认位于:/cache static String getExternalStorageState();
//获取sd卡外部的状态,返回的内容可以判断sd卡是否被挂载.比如:
//判断if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))、除了MEDIA_MOUNTED("mounted")外,
//还可以通过MEDIA_MOUNTED_READ_ONLY("mounted_ro")来判断是否是只读挂载。 static File getExternalStoragePublicDirectory(String type); //获取sd卡指定的type标准目录
//type可以填入:
//DIRECTORY_ALARMS 系统提醒铃声存放的标准目录。
//DIRECTORY_DCIM 相机拍摄照片和视频的标准目录。
//DIRECTORY_DOWNLOADS 下载的标准目录。
//DIRECTORY_MOVIES 电影存放的标准目录。
//DIRECTORY_MUSIC 音乐存放的标准目录。
//DIRECTORY_NOTIFICATIONS 系统通知铃声存放的标准目录。
//DIRECTORY_PICTURES 图片存放的标准目录
//DIRECTORY_PODCASTS 系统广播存放的标准目录。
//DIRECTORY_RINGTONES 系统铃声存放的标准目录。 static File getExternalStorageDirectory(); //获取sd卡的路径

示例如下:

        Log.d("MainActivity", Environment.getExternalStorageState());

        Log.d("MainActivity", "getRootDirectory:  "+Environment.getRootDirectory().getAbsolutePath().toString());

        Log.d("MainActivity", "getDataDirectory:  "+Environment.getDataDirectory().getAbsolutePath().toString());

        Log.d("MainActivity", "getDownloadCacheDirectory:  "+Environment.getDownloadCacheDirectory().getAbsolutePath().toString());

        Log.d("MainActivity", "getExternalStorageDirectory:  "+Environment.getExternalStorageDirectory().getAbsolutePath().toString());

        Log.d("MainActivity", "DIRECTORY_ALARMS:  "+Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS).getAbsolutePath().toString());

        Log.d("MainActivity", "DIRECTORY_DCIM:  "+Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath().toString());

        Log.d("MainActivity", "DIRECTORY_DOWNLOADS: "+Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath().toString());

打印:

4.写activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:id="@+id/text_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SD卡读写内容:" /> <EditText
android:id="@+id/et_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/text_label"
android:minLines="5" /> <Button
android:id="@+id/btn_read"
android:layout_below="@id/et_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="读取内容" /> <Button
android:id="@+id/btn_write"
android:layout_below="@id/et_content"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="写入内容"
/> <TextView
android:id="@+id/text_sdSize"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="SD卡剩余:1KB 总:100KB" /> </RelativeLayout>

5.写Utils类(用于读写SD卡下的info.txt)

package com.example.utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Environment;
import android.text.format.Formatter;
import android.util.Log; public class Utils {
//获取SD卡下的info.txt内容
static public String getSDCardInfo(){ if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
return null; File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/info.txt"); //打开要读的文件 if(!file.exists()) //文件不存在的情况下
{
Log.v("sdcard", "file is Empty");
return "";
}
try {
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
StringBuilder sb = new StringBuilder();
String line = null; while((line=br.readLine())!=null) //获取每一行数据源
{
sb.append(line+"\r\n");
} return sb.toString(); } catch (IOException e) { e.printStackTrace(); return null;
}
} //将content写入SD卡下的info.txt
static public boolean writeSDCardInfo(String content){ if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
return false; File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/info.txt"); try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(content.getBytes());
fos.flush();
fos.close();
return true; } catch (IOException e) { e.printStackTrace();
return false;
}
}
}

6.写MainActivity类

package com.example.sdreadWrite;
import java.io.File;
import com.example.utils.Utils;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.text.format.Formatter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity { private TextView text_sdSize;
private EditText et_content; protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); et_content = (EditText)findViewById(R.id.et_content);
text_sdSize = (TextView)findViewById(R.id.text_sdSize); //获取SD卡容量
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ text_sdSize.setText("未挂载SD卡,获取SD卡容量失败"); }else{ File externalStorageDirectory = Environment.getExternalStorageDirectory(); long totalSpace = externalStorageDirectory.getTotalSpace();
long freeSpace = externalStorageDirectory.getFreeSpace(); String totalSize = Formatter.formatFileSize(MainActivity.this, totalSpace); String freeSize = Formatter.formatFileSize(MainActivity.this, freeSpace); text_sdSize.setText("SD卡剩余:"+ freeSize+" 总:"+totalSize);
} Button btn_read = (Button)findViewById(R.id.btn_read);
//读取SD卡事件
btn_read.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) { String content = Utils.getSDCardInfo(); if(content==null){ Toast.makeText(MainActivity.this,"读取失败",Toast.LENGTH_SHORT).show(); }else{
et_content.setText(content);
Toast.makeText(MainActivity.this,"读取成功",Toast.LENGTH_SHORT).show();
}
}
}); Button btn_write = (Button)findViewById(R.id.btn_write);
//写入sd卡事件
btn_write.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) { if(Utils.writeSDCardInfo(et_content.getText().toString())){ Toast.makeText(MainActivity.this,"写入成功",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainActivity.this,"写入失败",Toast.LENGTH_SHORT).show();
}
}
});
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

9.Android-读写SD卡案例的更多相关文章

  1. Android 读写SD卡的文件

    今天介绍一下Android 读写SD卡的文件,要读写SD卡上的文件,首先需要判断是否存在SD卡,方法: Environment.getExternalStorageState().equals(Env ...

  2. android 读写sd卡的权限设置

    原文:android 读写sd卡的权限设置 在Android中,要模拟SD卡,要首先使用adb的mksdcard命令来建立SD卡的镜像,如何建立,大家上网查一下吧,应该很容易找到,这里不说这个问题. ...

  3. Android读写SD卡

    SD卡的读写是我们在开发Android 应用程序过程中最常见的操作.下面介绍SD卡的读写操作方式: 1. 获取SD卡的根目录 String sdCardRoot = Environment.getEx ...

  4. android读写SD卡封装的类

    参考了网上的一些资源代码,FileUtils.java: package com.example.test; import java.io.BufferedInputStream; import ja ...

  5. android 读写SD卡文件

    参考: http://www.oschina.net/code/snippet_176897_7336#11699 写文件: private void SavedToText(Context cont ...

  6. android学习笔记47——读写SD卡上的文件

    读写SD卡上的文件 通过Context的openFileInput.openFileOutput来打开文件输入流.输出流时,程序打开的都是应用程序的数据文件夹里的文件,其存储的文件大小可能都比较有限- ...

  7. Android 常见SD卡操作

    目录 Android 常见SD卡操作 Android 常见SD卡操作 参考 https://blog.csdn.net/mad1989/article/details/37568667. [0.] E ...

  8. android 向SD卡写入数据

    原文:android 向SD卡写入数据 1.代码: /** * 向sdcard中写入文件 * @param filename 文件名 * @param content 文件内容 */ public v ...

  9. Android 检测SD卡应用

    Android 检测SD卡应用 //                                    Environment.MEDIA_MOUNTED // sd卡在手机上正常使用状态  // ...

随机推荐

  1. 【Gin-API系列】部署和监控(九)

    本文是[Gin-API系列]的最后一篇文章,简单介绍如何在生产环境的部署架构和监控手段. 生产部署 部署架构 使用Nginx加Keepalived的方式搭建,可以达到高可用的效果,并可以横向扩容 如何 ...

  2. Python日志功能与处理逻辑

    前言 在应用程序执行过程中,我们希望通过规范格式输出程序执行的详细信息,这时我们需要用到日志功能.在Python语言中,有个內建模块logging能够很好的实现日志功能.整体来说,logging配置可 ...

  3. HarmonyOS面向128KB-128MB内存终端开源

    2020年9月10日,以HDC Together为主题的2020年度华为开发者大会在东莞·松山湖举办,华为带来了HarmonyOS 2.0.EMUI 11.HMS.HUAWEI HiLink.HUAW ...

  4. TDengine常见问题解答(FAQ)

    1. TDengine2.0之前的版本升级到2.0及以上的版本应该注意什么?☆☆☆ 2.0版本在之前版本的基础上,进行了完全的重构,配置文件和数据文件是不兼容的.在升级之前务必进行如下操作: 删除配置 ...

  5. Redis单机安装以及集群搭建

    今天主要来看一下Redis的安装以及集群搭建(我也是第一次搭建). 环境:CentOS 7.1,redis-5.0.7 一.单机安装 1.将Redis安装包放置服务器并解压 2.进入redis安装目录 ...

  6. 深入了解几种IO模型(阻塞非阻塞,同步异步)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zk3326312/article/details/79400805一般来说,Linux下系统IO主要 ...

  7. 用友yonsuite产品二开之简单的yonsql查询小工具

    和以往的用友产品不同,yonsuite产品开发了低代码平台,满足客户的个性化开发需求.嗯~,一句话不知当讲不当讲,那就讲:所谓低代码平台就是开发不想用实施不会用系列.让我一个开发感受到了憋屈.

  8. dubbo学习(十)spring boot整合dubbo

    工程搭建与配置 生产者 1.创建一个生产者的spring boot工程,配置好依赖,并把接口实现类文件夹复制到新的工程里 2.pom.xml配置dubbo的相关依赖 <!-- Dubbo Spr ...

  9. SSH登录问题 .ssh/known_hosts和 ECDSA key

    问题描述: fakerdeMacBook-Pro:~ faker$ ssh root@123.***.***.34 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...

  10. 海量数据处理之布隆过滤器BloomFilter算法

    Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合.使用场景:数据量为100亿 ...