📜  Android外部存储示例(1)

📅  最后修改于: 2023-12-03 15:13:22.811000             🧑  作者: Mango

Android外部存储示例

Android系统中有两种存储方式:内部存储和外部存储。内部存储是指应用私有的存储区域,只有当前应用能够读取和写入;而外部存储则是指SD卡或其他外部存储设备,可以被多个应用或用户共享。本示例将演示如何在Android应用中访问和操作外部存储。

检查外部存储状态

在访问外部存储之前,我们需要先检查设备是否存在外部存储,并且外部存储是否可用。

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    // 外部存储可用
} else {
    // 外部存储不可用
}

在此示例中,我们使用 Environment 类的 getExternalStorageState() 方法来检查外部存储状态,并与 Environment.MEDIA_MOUNTED 常量进行比较。如果返回的状态与 MEDIA_MOUNTED 相同,则说明外部存储可用。

获取外部存储路径

一旦确定外部存储可用,我们需要获取外部存储的路径以便读写数据。在 Android 中,外部存储通常被挂载到 /mnt/sdcard 目录下。但是,由于不同设备可能会有不同的文件系统结构,我们不能直接硬编码路径。因此,我们可以使用 Environment 类的 getExternalStorageDirectory() 方法来获取外部存储根目录的路径:

File externalStorageDir = Environment.getExternalStorageDirectory();
String externalStoragePath = externalStorageDir.getAbsolutePath();

在此示例中,我们使用 Environment 类的 getExternalStorageDirectory() 方法来获取外部存储根目录的路径,并使用 getAbsolutePath() 方法将其转换为字符串类型。

在外部存储中读写文件

一旦获取了外部存储根目录的路径,我们就可以在外部存储中读写文件了。下面示例展示了如何在外部存储中创建文件、写入数据和读取数据:

String fileName = "example.txt";
String fileContent = "Hello, world!";
File file = new File(externalStoragePath, fileName);
try {
    FileWriter writer = new FileWriter(file);
    writer.write(fileContent);
    writer.close();

    FileReader reader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(reader);
    StringBuilder stringBuilder = new StringBuilder();
    String line = bufferedReader.readLine();
    while (line != null) {
        stringBuilder.append(line);
        line = bufferedReader.readLine();
    }
    reader.close();
    String content = stringBuilder.toString();
} catch (IOException exception) {
    exception.printStackTrace();
}

在此示例中,我们首先创建了一个文件名为 example.txt 的文件,并使用 FileWriter 类的 write() 方法将数据写入到该文件中。然后,我们使用 FileReader 类和 BufferedReader 类来读取文件内容,并使用 StringBuilder 类将读取到的内容连接为一个字符串。

请求外部存储的读写权限

在Android 6.0 (API级别 23) 及以上版本中,如果应用需要访问外部存储,必须在运行时向用户请求读写权限。下面示例展示了如何请求外部存储的读写权限:

private static final int REQUEST_EXTERNAL_STORAGE_PERMISSION = 1;

private void requestExternalStoragePermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_EXTERNAL_STORAGE_PERMISSION);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case REQUEST_EXTERNAL_STORAGE_PERMISSION:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 外部存储权限已获取
            } else {
                // 用户拒绝了请求,无法访问外部存储
            }
            break;
    }
}

在此示例中,我们首先检查当前应用是否已经具有读写外部存储的权限。如果没有,我们就使用 ActivityCompat 类的 requestPermissions() 方法请求该权限。然后,我们重写 onRequestPermissionsResult() 方法来处理用户的响应,以决定采取何种操作。