android saf 打开指定目录,并操作相关文件

saf存储访问框架(android 4.4 引入)全称 Storage Access Framework
用户可轻松在其所有首选文档存储提供程序中浏览并打开文档、图像及其他文件。
用户可通过易用的标准界面,以统一方式在所有应用和提供程序中浏览文件,以及访问最近使用的文件。
我们可以通过ACTION_OPEN_DOCUMENT或ACTION_OPEN_DOCUMENT_TREE来选择文件或文件夹,获得对应的URI(在Android系统中的地址)
通过URI与DocumentFile工具类来进行添加、编辑、保存和删除的操作

打开指定目录文件有两种方式

第一种使用(要求api level 19) ACTION_OPEN_DOCUMENT

使用方法:选择文件   (ACTION_CREATE_DOCUMENT 创建文件)Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);intent.addCategory(Intent.CATEGORY_OPENABLE);//必须intent.setType("*/*");//必须intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, uri);startActivityForResult(intent, WRITE_REQUEST_CODE);其中 uri:Uri uri = Uri.parse("content://com.android.externalstorage.documents/document/primary:test");固定格式:content://com.android.externalstorage.documents/document/primary:test 代表下面的test 文件夹,当然如果再想得到下一级文件夹还需要:既 :test:child

第二种方法(要求api level 21)ACTION_OPEN_DOCUMENT_TREE

使用方法:选择文件夹Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);//intent.putExtra("android.content.extra.SHOW_ADVANCED", true);intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, uri);startActivityForResult(intent, WRITE_REQUEST_CODE);其中uri 和第一种一样

操作返回的文件夹命令(使用第二种方法)

 借助 implementation "androidx.documentfile:documentfile:1.0.1"
 @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (data == null || resultCode != Activity.RESULT_OK) return;if (requestCode == WRITE_REQUEST_CODE) {DocumentFile child = DocumentFile.fromTreeUri(this, data.getData()).createDirectory("child").createFile("text/plain", "text.txt");Uri uri = child.getUri();try {getContentResolver().openOutputStream(uri).write("成功".getBytes());} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

android saf 打开指定目录,并操作相关文件相关推荐

  1. C# 打开指定目录并定位到文件

    1. 打开文件夹: System.Diagnostics.Process.Start(FilePath); 打开文件夹中某个文件: System.Diagnostics.Process.Start(F ...

  2. 【文件IO】Linux 文件操作(一) —— 遍历指定目录下的所有文件

    目录 一.访问目录相关函数 1.打开/访问目录 (opendir / fdopendir) 2.读取目录内容 (readdir) 3.关闭目录 (closedir) 二.遍历指定目录下的所有文件 一. ...

  3. Windows小技巧 -- 命令行窗口打开指定目录的资源管理器

    文章目录 方法一 explorer 命令快速打开指定目录的资源管理器 方法二 start 命令快速打开指定目录的资源管理器 start 命令小记 打开系统应用 打开新的命令行窗口 打开命令行窗口并执行 ...

  4. Python调Windows的资源管理器打开指定目录

    2019独角兽企业重金招聘Python工程师标准>>> 使用Python在Windows自定义命令时候遇到一个问题,调用Windows文件选择器打开指定文件目录. 这里介绍两种方式: ...

  5. python报表自动化系列 - 在Windows中打开指定目录

    python在Windows系统中打开指定目录(文件夹) 李俊才 邮箱:291148484@163.com [函数说明] 该函数可以在windows系统中打开指定的文件夹,参数path应为字符串形式表 ...

  6. Mac用命令行在访达中打开指定目录

    1. 在命令中打开指定目录 open /Users/用户名/git 2.  在命令中打开当前目录 open `pwd`

  7. 【 Linux 】图形化界面打开指定目录

    nautilus Ubuntu提供了nautilus命令可以用来直接以资源管理器的方式打开指定目录: # nautilus $pwd # 图形化界面打开指定目录# 打开 opt 目录 nautilus ...

  8. Linux常用命令(本篇包括,Linux目录结构介绍、Linux Shell介绍、9个常见命令介绍、文件的概念、文件的操作(20个)、目录的操作、文件和目录的权限、文件压缩及解压缩)

    Linux常用命令(本篇包括,Linux目录结构介绍.Linux Shell介绍.9个常见命令介绍.文件的概念.文件的操作(20个).目录的操作.文件和目录的权限.文件压缩及解压缩)         ...

  9. php中如何判断目录是否存在文件_PHP判断指定目录下是否存在文件

    这篇文章介绍的内容是关于PHP判断指定目录下是否存在文件 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下/* 功能:判断某个目录下是否存在文件: 参数:$path -- 要进行判断的目 ...

最新文章

  1. PDF 补丁丁 0.5.0.2078 测试版发布:不用打字,也能加书签
  2. java validation_java bean validation 参数验证
  3. ubuntu16.04x下搜狗输入法无法输入中文
  4. AI创想秀,邂逅“华为云ModelArts”征文大赛——第一次收官
  5. Oracle如何监控表的DML次数
  6. ad19pcb所有元件都在报错_PLC的线圈输出和置复位,可以混用吗?很多人都会犯这个错误!...
  7. 点云数据显示_vispy 显示 kitti 点云数据
  8. 2019双11,支付宝有哪些“秘密武器”?
  9. java 抽象类 静态变量_Java基础之 接口、抽象类、构造方法、setXxx,getXxx、静态变量和成员变量、代码块、this和super的区别、final关键字、重写与重载...
  10. linux下configure命令详细介绍[转]
  11. c#获取软件版本、windows用户名、windows用户目录、.net版本、windows版本等
  12. UI设计理论和UI总结
  13. pycharm远程调试的“bug”:/miniconda3/envs/learn/bin/python: can‘t open file ‘//<a2a1d7b1c-6145-4e45-...
  14. 【数据库】SQL server 启用IFI 功能
  15. 安全之路 —— C/C++开3389端口(远程终端)
  16. 【论文泛读】Leveraging Distribution Alignment via Stein Path for Cross-Domain Cold-Start Recommendation
  17. 社保到底是多交好,还是少交好?
  18. Unity3D 模型描边插件Outline Effect详细使用说明、C#功能扩展
  19. jquery ajax json文件,jQuery ajax读取本地json文件
  20. 【CF#715C】Digit Tree 点分治+乘法逆元

热门文章

  1. 在大功率DCDC中为什么LLC输出要用mos管整流而不是二极管?
  2. 【CSDN开发云】v1.21 版本,自定义镜像管理
  3. cocos2dx 物理引擎chipmunk
  4. Android视频编辑器(四)通过OpenGL给视频增加不同滤镜效果
  5. 浅谈Jmockit使用
  6. linux的地址随机化ASLR,[翻译]Linux (x86) Exploit 开发系列教程之六(绕过ASLR - 第一部分)...
  7. 金仓数据库KingbaseES运维工具参考手册(5. 辅助运维工具)
  8. 漏电继电器JD1-100
  9. 中国式智慧:古人为何乐意露破绽给皇帝?
  10. [HNOI 2012] 永无乡