在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`方法实现。