android读写sd卡操作写入数据读取数据示例


在Android开发中,对SD卡进行读写操作是一个常见的需求。以下是一个简单的示例,展示如何在Android应用中写入和读取SD卡上的数据。请注意,从Android 6.0(API 级别 23)开始,需要在运行时请求存储权限。

### 写入SD卡数据

首先,确保你的应用有写入外部存储的权限。在`AndroidManifest.xml`中添加:


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 如果你的应用目标是Android 10(API 级别 29)或更高版本,并且你想访问共享存储空间中的文件,
     你还需要声明以下权限,但这通常不是必需的,除非你需要访问特定于设备的存储。 -->
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />

<!-- 对于Android 11(API 级别 30)及以上版本,你可能还需要处理分区存储的权限变更。 -->

然后,使用以下代码写入SD卡:


public void writeToFile(String fileName, String fileContents) {
    File externalStorage = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_DOWNLOADS);
    File myFile = new File(externalStorage, fileName);

    try (FileOutputStream fos = new FileOutputStream(myFile)) {
        fos.write(fileContents.getBytes());
        Log.d("FileWrite", "File written successfully");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

// 调用示例
writeToFile("example.txt", "Hello, SD Card!");

### 读取SD卡数据

读取SD卡上的文件与写入类似,但你需要使用`FileInputStream`:


public String readFromFile(String fileName) {
    File externalStorage = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_DOWNLOADS);
    File myFile = new File(externalStorage, fileName);

    StringBuilder stringBuilder = new StringBuilder();

    try (BufferedReader br = new BufferedReader(new FileReader(myFile))) {
        String line;

        while ((line = br.readLine()) != null) {
            stringBuilder.append(line);
            stringBuilder.append('\n');
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    return stringBuilder.toString();
}

// 调用示例
String fileContent = readFromFile("example.txt");
Log.d("FileRead", "File content: " + fileContent);

**注意**:

- 对于Android 10(API 级别 29)及以上版本,直接访问外部存储的方式可能会受到限制,具体取决于你的应用目标SDK版本和设备的存储访问框架。在这些版本中,你可能需要使用分区存储(Scoped Storage)模型。

- 从Android 11(API 级别 30)开始,默认情况下,应用只能访问自己的应用专属目录和媒体文件集合(如图片、视频等),除非用户明确授予了访问所有文件的权限。

- 始终在运行时检查权限,并在需要时请求权限。这可以通过`ActivityCompat.requestPermissions`方法实现。