android系统文件选择获取真实路径并进行文件移动操作
时间: 2024-12-18 10:37:16 浏览: 17
android实现Uri获取真实路径转换成File的方法
在Android系统中,获取文件选择的真实路径并进行文件移动操作需要经过以下几个步骤:
1. **请求权限**:首先,你需要在AndroidManifest.xml中添加读取外部存储权限 `<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />` 和 写入外部存储权限 `<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />`。
2. **选择文件**:使用 `ACTION_OPEN_DOCUMENT或多选ACTION_OPEN_DOCUMENT_TREE` Intent 来启动系统的文件选择器,用户可以选择文件或文件夹。例如:
```java
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*"); // 或者指定特定的文件类型
startActivityForResult(intent, FILE_PICK_REQUEST_CODE);
```
记得处理 onActivityResult 并获取 Uri 对象。
3. **转换Uri到真实路径**:通过 ContentResolver 获取文件的实际路径。这通常涉及使用 `getPath()` 或者第三方库如`DocumentFile`:
```java
String selectedPath;
if (requestCode == FILE_PICK_REQUEST_CODE) {
DocumentFile file = DocumentsContract.getDocumentFileFromUri(context, data);
if (file != null) {
try {
selectedPath = file.getPath();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
4. **移动文件**:创建一个新的 `Uri` 表示目标位置,然后使用 `move()`, `copyTo()` 或 `moveOrCopy()` 方法:
```java
Uri targetDirectory = MediaStore.Files.getContentUri("external");
Uri destPath = Uri.fromFile(new File(targetDirectory.getPath(), "new_file_name"));
contentResolver.move(selectedPath, destPath);
```
确保在实际操作前检查权限是否已授予,并处理可能出现的异常。
阅读全文