打开文件管理器并进行文件夹的复制、移动、删除、创建

  1. 调文件文件管理器并获取可操作文件的DocumentFile
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
//设置读写权限
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(intent, FILE_OPERATION);
  1. 通过Intent获取文件的Uri
 Uri treeUri = data.getData();DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);

现在已经已经获取到DocumentFile了,可以根据此对文件进行操作
注意:如果是移动和复制的话需要再跳转一次文件管理器,拿到目标文件夹的DocumentFile

使用DocumentFile对文件进行移动,复制,删除,创建

一:复制文件夹

/*** 拷贝所有的文件* @param sourceFile 源文件* @param targetFile 目标文件*/
public void copyAllFiles(DocumentFile sourceFile, DocumentFile targetFile) {if (sourceFile.exists() && targetFile.canWrite()) {//获取源文件下的所有文件DocumentFile[] documentFiles = sourceFile.listFiles();for (DocumentFile documentFile1 : documentFiles) {if (documentFile1.isFile()) {//是文件而不是文件夹或目录//创建文件,第一个参数是文件类型,第二个是文件名DocumentFile createFile = targetFile.createFile(documentFile1.getType(), documentFile1.getName());writeFileByStream(documentFile1, createFile);} else {//如果是目录则先获取该文件夹名称String directoryName = documentFile1.getName();//创建目录DocumentFile createDirFile = targetFile.createDirectory(directoryName);//递归文件目录copyAllFiles(documentFile1, createDirFile);}}}
}

通过流的方式写入文件

/*** 通过流的方式写文件* @param sourceFile 源文件* @param targetFile 目标文件*/
private boolean writeFileByStream(DocumentFile sourceFile, DocumentFile targetFile) {try {InputStream inputStream = mContext.getContentResolver().openInputStream(sourceFile.getUri());OutputStream outputStream = mContext.getContentResolver().openOutputStream(targetFile.getUri());byte[] buffer = new byte[1024];int byreRead;while (-1 != (byreRead = inputStream.read(buffer))) {outputStream.write(buffer, 0, byreRead);}inputStream.close();outputStream.flush();outputStream.close();return true;} catch (IOException e) {e.printStackTrace();return false;}
}

二:移动文件夹

/*** 拷贝所有的文件* @param sourceFile 源文件* @param targetFile 目标文件*/
public void moveAllFiles(DocumentFile sourceFile, DocumentFile targetFile) {if (sourceFile.exists() && targetFile.canWrite()) {DocumentFile[] documentFiles = sourceFile.listFiles();for (DocumentFile documentFile1 : documentFiles) {if (documentFile1.isFile()) {DocumentFile createFile = targetFile.createFile(documentFile1.getType(), documentFile1.getName());if(writeFileByStream(documentFile1, createFile)){//删除源文件documentFile1.delete();}} else {//如果是目录则先获取该文件夹名称String directoryName = documentFile1.getName();//创建目录DocumentFile createDirFile = targetFile.createDirectory(directoryName);//递归moveAllFiles(documentFile1, createDirFile);//移动成功后删除原文件夹documentFile1.delete();}}}
}

三:删除文件夹

/*** 遍历删除所有文件* @param documentFile 源文件*/
public void deleteAllFiles(DocumentFile documentFile) {if (documentFile.exists() && documentFile.canWrite()) {for(DocumentFile documentFile1 : documentFile.listFiles()){if (documentFile1.delete()) {Log.d(TAG, "traversalFiles2Delete: 文件删除成功");}}}
}

四:创建文件夹

DocumentFile documentFile = DocumentFile.fromTreeUri(this, treeUri);
documentFile.createDirectory(directoryName);

主要的实现已经写出来了,如果有什么疑问欢迎到下方留言给我

打开文件管理器并进行文件夹的复制、移动、删除、创建相关推荐

  1. c语言如何重命名文件夹,VC 复制移动删除重命名文件文件夹

    /* 能产生对话框的标志: FOF_SILENT             //progress dialog FOF_RENAMEONCOLLISION //replace dialog FOF_NO ...

  2. win10 uwp 打开文件管理器选择文件

    本文:让文件管理器选择文件,不是从文件管理器获得文件. 假如已经获得一些文件,那么如何从文件管理器选择这些文件? 使用方法很简单. 从网上拿图来说 打开文件夹自动选择所有文件 首先需要获得文件夹,因为 ...

  3. android APP读写execl文件,文件管理器查看excel文件

    我想在我的APP里面读写excel文档,然后在手机的文件管理里面查看这个excel文档.我找了一个例子,在app里面写了一个excel文档. 问题一.我在想文档存放在哪里呢?看下面的代码吧. prin ...

  4. Qt for androidx 调用手机系统自带文件选择器, 打开指定路径下的文件夹

    文章目录 前言 代码实现 Qt 调用代码 前言 前面写过一篇Qt for Androidx 调用手机系统自带图库选择图片,打开系统文件选择器,选择相应文件 这个打开是跳转到默认的系统的文件夹了,不利于 ...

  5. linux移动文件命令使用方法,如何使用Linux命令或文件管理器来移动文件?

    [51CTO.com快译]有些任务很简单又经常做,以至于用户对此觉得理所当然.但随后你迁移到了新平台,同样那些简单的任务开始需要占用一部分精力才能完成,将文件从一个位置移到另一个位置就是这种任务.当然 ...

  6. VB打开资源管理器并指定文件

    '声明API Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA&q ...

  7. Linux简单的文件管理器设计,桌面应用|如何从 Linux 的文件管理器中加密文件

    Linux 桌面版和服务器版具有卓越的安全性.然而这并不意味着你可以放松警惕.你应该一直认为你的数据总是很快就会被破坏.也就是说,你可能需要使用各种加密工具.比如 GnuPG,它可以让你加密和解密文件 ...

  8. win10打开计算机加载很慢,win10电脑文件夹打开特别慢怎么回事 文件夹假死问题快速解决步骤...

    win10系统打开文件夹速度变慢是怎么办?大家在使用电脑一段时间后,有时候打开文件夹速度变得很慢,那么怎么才能让打开文件夹的速度恢复正常呢?又是什么原因造成的文件夹打开缓慢呢?其实这就是传说中的假死现 ...

  9. python打开文件管理器

    python 使用win32 API打开文件管理器对话窗口代码 win10 系统进行python GUI设计时,涉及到文件打开.保存等可以使用win32 API接口来实现,使弹出的文件管理窗口更美观. ...

最新文章

  1. ASP.NET MVC以ValueProvider为核心的值提供系统: DictionaryValueProvider
  2. 2021-7-20 Linux服务器终端terminals关不掉怎么办???
  3. php memcached 扩展安装目录,php安装memcached扩展
  4. Navicat Essentials 功能简介
  5. 信息系统项目管理师论文模板下载
  6. Unet项目解析(2):./src/retinaNN_training.py
  7. python flask
  8. 【语义分割】ICCV21_Self-Regulation for Semantic Segmentation
  9. SQLExecption:Operation not allowed after ResultSet closed解决办法
  10. CRMEB知识付费系统v1.4.4源码
  11. gradle指令linux守护,gradle之gradlew最全指令攻略
  12. java biginteger 比较大小,Java BigInteger compareTo()用法及代码示例
  13. 暗影精灵4电脑win10系统重装+linux双系统安装
  14. FillRect与FrameRect用法
  15. FastDDS(9)Security安全性
  16. OOD: 我所理解的SOLID原则
  17. DNS服务器未响应是什么意思
  18. PHP简单MVC架构
  19. js 获取上下文后面的路径_通过在数据后面显示上下文来可视化公众意见
  20. 【Spring】Spring面试题

热门文章

  1. html中背景条纹效果,使用CSS线性渐变 制作条纹背景
  2. 《自然》杂志:面对“电车难题”,不同国家的人有不同的道德选择
  3. OneNote中英文格式不同,OneNote无法修改英文字体,OneNote默认英文字体为Calibri无法修改的问题。
  4. C语言中的%p是什么意思?
  5. 在阿里云CentOS 7.4下安装WSTMart开源商城系统
  6. Oracle连接不上解决办法合集
  7. Visual Studio2022快速生成函数说明文档
  8. G711音频编码格式
  9. sim_com AT
  10. 不同等级的UI设计师工作内容有什么区别?