📜  Android中的外部存储示例(1)

📅  最后修改于: 2023-12-03 14:59:17.282000             🧑  作者: Mango

Android中的外部存储示例

Android设备的存储可以分为两种:内部存储和外部存储。内部存储通常用于存储应用程序数据,而外部存储通常用于存储用户数据,例如照片、音乐和文档等。

判断外部存储是否可用

在进行外部存储操作前,需要先检查外部存储是否可用。可以使用以下代码来进行检查:

public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

该函数返回一个布尔值,如果外部存储是可写的,则返回 true。

获取外部存储目录

在 Android 中,可以通过 getExternalStorageDirectory() 函数获取外部存储目录:

File externalStorageDirectory = Environment.getExternalStorageDirectory();

上面的代码将获取外部存储目录作为 File 对象存储在 externalStorageDirectory 变量中。

访问外部存储

从 Android 6.0(API 级别 23)开始,需要在运行时请求 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限才能读取或写入外部存储。在代码中,可以使用以下方法来检查是否已经获得了这些权限:

public boolean checkExternalStoragePermission() {
    int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    return permissionCheck == PackageManager.PERMISSION_GRANTED;
}

接下来,如果还没有获得这些权限,则需要请求这些权限:

if (!checkExternalStoragePermission()) {
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
            MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
}

当用户将应用程序安装在 Android 6.0 或更高版本的设备上时,他将会被提醒授予或拒绝这些权限。在权限请求对话框消失后,将调用 onRequestPermissionsResult() 方法。在该方法中,您可以检查权限是否已被授予:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Permission granted
        } else {
            // Permission denied
        }
    }
}
读写外部存储

下面是一些用于读写外部存储的代码示例。请确保已经检查了外部存储是否可用,并获取了适当的权限。

写操作

File file = new File(externalStorageDirectory, "example.txt");
String text = "Hello world!";
try {
    FileWriter writer = new FileWriter(file);
    writer.append(text);
    writer.flush();
    writer.close();
} catch (IOException e) {
    e.printStackTrace();
}

读操作

File file = new File(externalStorageDirectory, "example.txt");
StringBuilder builder = new StringBuilder();
try {
    FileReader reader = new FileReader(file);
    char[] buffer = new char[1024];
    int read;
    while ((read = reader.read(buffer)) != -1) {
        builder.append(buffer, 0, read);
    }
    reader.close();
} catch (IOException e) {
    e.printStackTrace();
}
String text = builder.toString();

上面的代码将从名为 "example.txt" 的文件中读取文本内容,并将其存储在 text 变量中。

总结

本文展示了如何检查外部存储的可用性、获取外部存储目录以及访问外部存储。请确保了解了这些操作并遵循最佳实践,例如保护数据和正确地请求权限。