Android存储(读取)之SD卡

本文讲解了SD卡存储和读取数据(数据内容仅限为String)

//        把String保存到sd文件中
        StoreUtils.storeStringToSDCard(
        this, 
        "新浪体育讯hah",
        "qwe.txt",
        "aaaq");

//        读取存储在SD卡中的文件
        String data = StoreUtils.readStringFromSDCard(
        new File(Environment.getExternalStorageDirectory() + "/aaaq", 
        "qwe.txt"));
package com.github.c.ceshi;

import android.content.Context;
import android.os.Environment;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;

/**
 * Created by a on 2016/5/15.
 */
public class StoreUtils {

    /**
     * SD卡存储注意事项:
     *1. 声明写sd卡的权限(清单文件)
     *2. 获得sd卡的目录:Environment.getExternalStorageDirectory()
     *3. 判断sd卡的状态.是否存在,是否可以读写:Environment.getExternalStorageState();
     *4. 判断sd卡剩余可用空间:Environment.getExternalStorageDirectory().getFreeSpace();
     */

    /**
     * 把String保存到sd文件中
     * 默认路径为:/mnt/sdcard/
     * 但是不同的手机是不一样的所以要使用:Environment.getExternalStorageDirectory()来获取系统的sdcard目录
     *
     * @param context             上下文
     * @param content             要存储在sd卡中的文本内容
     * @param fileName            存储的文件名
     * @param secondaryStorageDir 存储在sd卡中的二级目录的文件夹名称,如果为null,则存储在sd卡根目录下
     */
    public static void storeStringToSDCard(Context context, String content, String fileName, String secondaryStorageDir) {
        try {
//            获取sd卡的状态(是否挂载,是否可读写)
            String status = Environment.getExternalStorageState();
//            获取sd卡的可用空间
            long usableSpace = Environment.getExternalStorageDirectory().getUsableSpace();
            //判断sd卡的状态是否有,是否可以被读写.
            if (Environment.MEDIA_MOUNTED.equals(status)) {//sd卡已经挂载,可读可写

                if (usableSpace < 1024) {//判断SD剩余空间是否够用
                    Toast.makeText(context, "SD卡可用空间不足", Toast.LENGTH_SHORT).show();
                    return;
                }
                File file;
                if (secondaryStorageDir == null) {
                    file = new File(Environment.getExternalStorageDirectory(), fileName);

                } else {
                    file = new File(Environment.getExternalStorageDirectory() + "/" + secondaryStorageDir, fileName);
                    if (!file.getParentFile().exists()) {
                        file.getParentFile().mkdirs();
                    }
                }
                FileOutputStream fos = new FileOutputStream(file);
                fos.write(content.getBytes());
                fos.close();
                Toast.makeText(context, "存储数据到sd卡成功", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(context, "sd卡不可写,请检查sd卡状态", Toast.LENGTH_SHORT).show();
            }
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(context, "存储数据到sd卡失败", Toast.LENGTH_SHORT).show();
        }
    }


    /**
     * 读取存储在SD卡中的文件
     * 默认路径为:/mnt/sdcard/
     * 但是不同的手机是不一样的所以要使用:Environment.getExternalStorageDirectory()来获取系统的sdcard目录
     *
     * @param file
     * @return 读取结果String
     */
    public static String readStringFromSDCard(File file) {
//            获取sd卡的状态(是否挂载,是否可读写)
        String status = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(status)) {//sd卡已经挂载,可读可写
            try {
                FileInputStream fis = new FileInputStream(file);
                BufferedReader br = new BufferedReader(new InputStreamReader(fis));
                String content = "";
                String tmp;
                while ((tmp = br.readLine()) != null) {
                    content += tmp;
                }
                br.close();
                fis.close();
                return content;
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return "不存在此文件,请核对文件路径、文件名";
            } catch (Exception e) {
                e.printStackTrace();
                return "文件读取失败";
            }
        } else {
            return "SD卡不可用,请检查sd卡状态";
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值