Android11打开文件管理器分别获取U盘文件的路径和本地文件的路径
时间: 2023-10-08 17:10:15 浏览: 158
Android 6.0上sdcard和U盘路径获取和区分方法
5星 · 资源好评率100%
获取U盘文件路径的代码如下:
```java
// 获取U盘存储设备的根目录
File usbDrive = new File("/mnt/usb_storage/USB_DISK1");
// 列出U盘根目录下所有文件
File[] files = usbDrive.listFiles();
// 遍历文件列表,获取文件路径
for (File file : files) {
String filePath = file.getAbsolutePath();
// 处理文件路径
}
```
获取本地文件路径的代码如下:
```java
// 获取本地存储根目录
File localDrive = Environment.getExternalStorageDirectory();
// 列出本地存储根目录下所有文件
File[] files = localDrive.listFiles();
// 遍历文件列表,获取文件路径
for (File file : files) {
String filePath = file.getAbsolutePath();
// 处理文件路径
}
```
需要注意的是,在 Android 11 中,对于本地存储目录的访问需要使用 `MediaStore` API,而不是直接访问文件系统。例如,获取 Downloads 目录下所有文件的代码如下:
```java
// 查询下载文件
Uri uri = MediaStore.Downloads.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.Downloads._ID, MediaStore.Downloads.DISPLAY_NAME};
String selection = null;
String[] selectionArgs = null;
String sortOrder = null;
Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
// 遍历查询结果,获取文件路径
while (cursor.moveToNext()) {
long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Downloads._ID));
String fileName = cursor.getString(cursor.getColumnIndex(MediaStore.Downloads.DISPLAY_NAME));
Uri contentUri = ContentUris.withAppendedId(MediaStore.Downloads.EXTERNAL_CONTENT_URI, id);
String filePath = getFilePathFromUri(contentUri);
// 处理文件路径
}
cursor.close();
// 将 content:// 形式的 Uri 转换为文件路径
private String getFilePathFromUri(Uri uri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
cursor.close();
return path;
}
return null;
}
```
阅读全文