Android知识点梳理--sdcard读写操作

本文介绍了Android中SDcard的文件读写操作,包括权限设置、路径获取、文件操作以及读写示例代码。同时,提到了从resource的raw和asset中读取文件的方法,并提供了获取扩展存储设备大小的示例。
摘要由CSDN通过智能技术生成

从事Android开发也很长时间了,知识点多而杂,一直以来都想做个系统的整理和总结,心动不如行动。

做软件开发,不管什么系统下的,总是少不了文件的读写操作,就先从SDcard的文件读写操作开始吧。

1权限

读写SDcard自然是需要从系统那获取相应的许可的,就是权限。这个是第一步,没有这个什么都做不下去。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
读写SDcard的时候经常打交道的一个类就是Environment类,列一下常见静态方法:

  1:getDataDirectory() 获取到Android中的data数据目录(sd卡中的data文件夹)     2:getDownloadCacheDirectory() 获取到下载的缓存目录(sd卡中的download文件夹)     3:getExternalStorageDirectory() 获取到外部存储的目录 一般指SDcard(/storage/sdcard0)     4:getExternalStorageState() 获取外部设置的当前状态 一般指SDcard,比较常用的应该是 MEDIA_MOUNTED(SDcard存在并且可以进行读写)还有其他的一些状态,可以在文档中进行查找。

    5:getRootDirectory()  获取到Android Root路径

2判断SDcard是否存在

这个也是先决条件,很多初学者会忘记的。

/**
 * 判断sd卡是否存在,[当没有外挂SD卡时,内置ROM也被识别为存在sd卡]
 * @return
 */
private static boolean isExitSDcard(){
    boolean isExit;
    isExit = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
    return isExit;
}
这里又有Environment类里的常量了,我总结了一下,在这里列出来供大家参考
MEDIA_BAD_REMOVAL 在没有挂载前存储媒体已经被移除。
MEDIA_CHECKING 正在检查存储媒体。
MEDIA_MOUNTED 存储媒体已经挂载,并且挂载点可读/写。
MEDIA_MOUNTED_READ_ONLY 存储媒体已经挂载,挂载点只读。
MEDIA_NOFS 存储媒体是空白或是不支持的文件系统
MEDIA_REMOVED 存储媒体被移除。
MEDIA_SHARED 存储媒体正在通过USB共享。
MEDIA_UNMOUNTABLE 存储媒体无法挂载。
MEDIA_UNMOUNTED 存储媒体没有挂载。

在Environment中还提供了Android标准目录的路径,以String类型提供。
DIRECTORY_ALARMS 系统提醒铃声存放的标准目录。
DIRECTORY_DCIM 相机拍摄照片和视频的标准目录。
DIRECTORY_DOWNLOADS 下载的标准目录。
DIRECTORY_MOVIES 电影存放的标准目录。
DIRECTORY_MUSIC 音乐存放的标准目录。
DIRECTORY_NOTIFICATIONS 系统通知铃声存放的标准目录。
DIRECTORY_PICTURES 图片存放的标准目录
DIRECTORY_PODCASTS 系统广播存放的标准目录。
DIRECTORY_RINGTONES 系统铃声存放的标准目录。

3获取路径和创建文件,文件夹

1)获取常用的路径,一般开发者这两种路径常用到

//SD卡的路径

SDPATH = Environment.getExternalStorageDirectory().getPath();
//当前程序包的路径
FILESPATH = this.getFilesDir().getPath();
2)创建文件夹,文件
private final static String PATH = "/sdsd/talk/tehst.txt";
private final static String PATH1 = "/sdsd/talk/";
//创建文件夹
File file1 = new File(SDPATH+PATH1);
if (!file1.exists()){
    file1.mkdirs();
}
//创建文件
File file = new File(SDPATH + PATH);
if (!file.exists()) {
    file.createNewFile();
}
3)删除文件

//单个
public boolean deleteSDFile(String fileName) {
    File file = new File(SDPATH  + fileName);
    if (file == null || !file.exists() || file.isDirectory())
        return false;
    return file.delete();
}
//目录下的
public void deleteFile(File file) {
        if (file.exists()) { // 判断文件是否存在
            if (file.isFile()) { // 判断是否是文件
                file.delete(); 
            } else if (file.isDirectory()) { // 否则如果它是一个目录
                File files[] = file.listFiles(); // 声明目录下所有的文件 files[];
                for (int i = 0; i < files.length; i++) { // 遍历目录下所有的文件
                    this.deleteFile(files[i]); // 把每个文件 用这个方法进行迭代
                }
            }
            file.delete();
        } else {
//            Log.i("文件不存在!"+"\n");
        }
    }
//删除目录下的所有文件及文件夹

public static void delete(File file) {  
        if (file.isFile()) {  
            file.delete();  
            return;  
        }  
        if(file.isDirectory()){  
            File[] childFiles = file.listFiles();  
            if (childFiles == null || childFiles.length == 0) {  
                file.delete();  
                return;  
            }  
      
            for (int i = 0; i < childFiles.length; i++) {  
                delete(childFiles[i]);  
            }  
            file.delete();  
        }  
    } 

4)文件的读写

闲话少说,直接上代码


FileOutputStream写入文件

/**
 * 写入内容到SD卡中的txt文本中
 * str为内容
 */
public void writeSDFile(String str,String fileName) {
    try {
        FileWriter fw = new FileWriter(SDPATH + fileName);
        File f = new File(SDPATH  + fileName);
        fw.write(str);
        FileOutputStream os = new FileOutputStream(f);
        DataOutputStream out = new DataOutputStream(os);
        out.writeShort(2);
        out.writeUTF("");
        S
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值