如何在Android编程中实现SD卡文件读写操作?实例详解!

Android编程之在SD卡上进行文件读写操作实例详解

如何在Android编程中实现SD卡文件读写操作?实例详解!

在Android应用程序开发中,对SD卡进行文件读写操作是一个常见的需求,本文将详细介绍如何在Android应用中实现这些操作,并提供相应的代码示例。

一、权限管理

在Android 6.0(API级别23)及以上版本,应用程序需要在运行时请求用户授权,才能访问SD卡,首先需要在AndroidManifest.xml文件中添加以下权限声明:

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

然后在代码中检测权限状态,并在权限缺失时向用户请求权限:

if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {
    // 权限未被授予,需要请求权限
    ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
            MY_PERMISSIONS_REQUEST_WRITE_STORAGE);
}

处理权限请求的回调:

@Override
public void onRequestPermissionsResult(int requestCode,
        String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_WRITE_STORAGE: {
            // 如果请求被取消,则结果数组为空
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 权限被授予,执行相关操作
            } else {
                // 权限被拒绝,告知用户无需权限的功能
            }
            return;
        }
    }
}

二、获取SD卡路径

在Android系统中,可以通过Environment类获取外部存储的根目录:

String sdCardRoot = Environment.getExternalStorageDirectory().getAbsolutePath();

从Android 10(API级别29)开始,建议使用特定的应用目录来存储数据,而不是直接访问外部存储的根路径:

如何在Android编程中实现SD卡文件读写操作?实例详解!

File externalFilesDir = context.getExternalFilesDir(null);

三、创建文件夹和文件

创建文件夹

在SD卡上创建文件夹可以使用File类的mkdirs()方法:

public File createDirOnSDCard(String dir) {
    File dirFile = new File(sdCardRoot + File.separator + dir + File.separator);
    Log.v("createDirOnSDCard", sdCardRoot + File.separator + dir + File.separator);
    dirFile.mkdirs();
    return dirFile;
}

创建文件

在SD卡上创建文件可以使用File类的createNewFile()方法:

public File createFileOnSDCard(String fileName, String dir) throws IOException {
    File file = new File(sdCardRoot + File.separator + dir + File.separator + fileName);
    Log.v("createFileOnSDCard", sdCardRoot + File.separator + dir + File.separator + fileName);
    file.createNewFile();
    return file;
}

四、判断文件是否存在

可以使用File类的exists()方法来判断SD卡上的某个文件是否存在:

public boolean isFileExist(String fileName, String path) {
    File file = new File(sdCardRoot + path + File.separator + fileName);
    return file.exists();
}

五、写入数据到文件

将数据写入到SD卡指定目录文件可以使用FileOutputStream类:

如何在Android编程中实现SD卡文件读写操作?实例详解!

public File writeData2SDCard(String path, String fileName, InputStream data) {
    File file = null;
    OutputStream output = null;
    try {
        createDirOnSDCard(path); // 创建目录
        file = createFileOnSDCard(fileName, path); // 创建文件
        output = new FileOutputStream(file);
        byte buffer[] = new byte[2 * 1024]; // 每次写2K数据
        int temp;
        while ((temp = data.read(buffer)) != -1) {
            output.write(buffer, 0, temp);
        }
        output.flush();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            output.close(); // 关闭数据流操作
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }
    return file;
}

六、读取文件数据

读取SD卡上的文件数据可以使用FileInputStream类:

public String readDataFromSDCard(String path, String fileName) {
    File file = new File(sdCardRoot + path + File.separator + fileName);
    StringBuilder stringBuilder = new StringBuilder();
    try {
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        while ((line = br.readLine()) != null) {
            stringBuilder.append(line).append("
");
        }
        br.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return stringBuilder.toString();
}

七、删除文件或文件夹

可以使用File类的delete()方法来删除文件或文件夹:

public boolean deleteFileOrFolder(String path) {
    File file = new File(sdCardRoot + path);
    if (file.exists()) { // 判断文件或文件夹是否存在
        if (file.delete()) { // 删除文件或文件夹(如果删除成功)
            Log.d("Delete file", "Deleted successfully");
            return true;
        } else { // 删除失败(权限不足或磁盘空间不足等原因)
            Log.d("Delete file", "Failed to delete");
            return false;
        }
    } else { // 文件或文件夹不存在
        Log.d("Delete file", "File not found");
        return false;
    }
}

通过以上步骤,我们可以在Android应用中实现对SD卡的文件读写操作,需要注意的是,随着Android版本的更新,对外部存储的访问方式可能会有所变化,开发者应根据实际情况进行调整。

小伙伴们,上文介绍了“Android编程之在SD卡上进行文件读写操作实例详解”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/638704.html

(0)
打赏 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
上一篇 2024-11-10 21:43
下一篇 2024-11-10 21:51

相关推荐

  • 局域网的ip

    局域网的IP在计算机网络中,IP地址是用于标识设备在网络中的位置的一种标识符,局域网(Local Area Network,LAN)是一种覆盖范围相对较小的网络,通常用于连接同一建筑物或同一校园内的计算机设备,局域网中的设备需要分配IP地址,以便进行数据交换和通信,本文将详细介绍局域网的IP地址的概念、分类、分配和管理等方面的内容。I……

    2024-01-24
    0113
  • redis扫描key

    在现代的软件开发中,Redis是一个广泛使用的内存数据结构存储系统,它支持多种数据结构,如字符串、列表、集合、散列和有序集合等,Redis还提供了丰富的功能,如持久化、主从复制、事务和管道等,在使用Redis的过程中,我们可能会遇到一些问题,比如在调用二维码时的不断刷新,本文将详细介绍如何排查和分析这个问题。问题描述在调用二维码时,我……

    2024-03-03
    0170
  • 松下服务器繁忙应该如何解决?

    松下服务器繁忙是一个常见的问题,可能由多种因素引起,以下是一些解决方法:一、用户端解决方法1、等待并重试: – 最简单的方法是等待一段时间再尝试访问,服务器繁忙通常是暂时性的,可能由于流量过大或维护操作引起,稍等片刻后可能就能恢复正常访问,2、检查网络连接: – 确保你的设备连接到互联网,并且网络连接稳定,尝试……

    2024-11-10
    02
  • 如何在Android开发中读取内存卡上的XLS文件并保存到数据库?

    Android开发读取内存卡上的xls文件保存到数据库中在Android应用开发中,有时需要从外部存储设备(如SD卡)读取文件并将其数据导入到应用的数据库中,本文将详细介绍如何在Android应用中实现这一功能,特别是针对Excel文件(.xls格式),我们将分几个步骤进行:获取权限、读取SD卡上的Excel文……

    2024-11-02
    05
  • 政府部门申请域名需要什么材料(政府部门申请域名需要什么材料和手续)

    政府部门申请域名需要提供组织机构代码证、法人身份证明等材料,并完成相关手续。

    行业资讯 2024-05-03
    0120
  • ipconfig命令的功能

    ipconfig命令是Windows操作系统中用于查看和配置IPv4网络配置信息的命令行工具,它可以帮助用户查看本机的IP地址、子网掩码、默认网关、DNS服务器等信息,以及配置这些参数,本文将详细介绍ipconfig命令的使用方法和相关技术知识。ipconfig命令语法ipconfig命令的基本语法如下:ipconfig [/all ……

    2024-01-27
    0147

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入