Android访问系统下载目录

Android访问系统下载目录

在新版本Android中应当使用MediaStore访问共享媒体文件。共享媒体文件也包括系统下载目录中的文件。MediaStore以ContentProvider的方式提供了文件信息,得到文件信息后,可以直接打开文件访问数据。

Listing 1: 读取下载目录下的文件信息

Cursor cursor = /* Context. */ getContentResolver().query(
    MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL),
    null, 
    MediaStore.Files.FileColumns.DATA + " like ?",
    new String[]{"%.txt"},
    null);

  while (cursor.moveToNext()) {
    long id = cursor.getLong(cursor.getColumnIndexOrThrow(BaseColumns._ID));
    String fullFileName = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA));
    int fileSize = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE));
    String fileBaseName = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME));
  }
  cursor.close();

MediaStore.MediaColumns.DATA列是文件的全名。有了全名,就可以使用File和InputStream可以访问文件中的数据。

Listing 2: 访问文件中的数据

// 方法一:使用File对象。
String fullFileName = "...";
InputStream inputStream1 = new FileInputStream(fullFileName);

// 方法二:使用ContentResolver。
Uri uri = Uri.parse(ContentResolver.SCHEME_FILE + "://" + fullFileName);
InputStream inputStream2 = /* Context. */ getContentResolver().openInputStream(uri);
Table 1: 部分预定义列
列名字 数据类型 含义
BaseColumns._ID long 文件编号
MediaStore.MediaColumns.SIZE int 文件大小
MediaStore.MediaColumns.DATA String 文件路径
MediaStore.MediaColumns.DISPLAY_NAME String 文件基础名
MediaStore.MediaColumns.RELATIVE_PATH String 文件目录
MediaStore.MediaColumns.DATE_MODIFIED long 文件修改时间
MediaStore.Files.FileColumns.MIME_TYPE String 媒体类型

Listing 3: 新建文件

String filename = "...";
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DISPLAY_NAME, filename);
values.put(MediaStore.MediaColumns.MIME_TYPE, "application/octet-stream");
values.put(MediaStore.MediaColumns.RELATIVE_PATH, "subdir");
ContentResolver resolver = requireContext().getContentResolver();
Uri uri = resolver.insert(MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL), values);
OutputStream outputStream = resolver.openOutputStream(uri);

你可能感兴趣的:(android,java,开发语言)