📅  最后修改于: 2023-12-03 15:13:22.811000             🧑  作者: Mango
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()
方法来处理用户的响应,以决定采取何种操作。