Android - 如何使用新的存储访问框架将文件复制到外部 SD 卡

2023-11-21

我正在我的应用程序中实现文件浏览器功能。我知道如何使用 ACTION_OPEN_DOCUMENT_TREE 意图获得外部 SD 卡的持久权限,以及如何使用 DocumentFile 类创建文件夹和删除文件/文件夹。

但是,我无法找到将文件复制/移动到外部 SD 卡文件夹的方法。你能指出我正确的方向吗?


我已经用很多关于SO的例子弄清楚了。我的音乐文件解决方案:

     private String copyFile(String inputPath, String inputFile, Uri treeUri) {
    InputStream in = null;
    OutputStream out = null;
    String error = null;
    DocumentFile pickedDir = DocumentFile.fromTreeUri(getActivity(), treeUri);
    String extension = inputFile.substring(inputFile.lastIndexOf(".")+1,inputFile.length());

    try {
        DocumentFile newFile = pickedDir.createFile("audio/"+extension, inputFile);
        out = getActivity().getContentResolver().openOutputStream(newFile.getUri());
        in = new FileInputStream(inputPath + inputFile);

        byte[] buffer = new byte[1024];
        int read;
        while ((read = in.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
        in.close();
        // write the output file (You have now copied the file)
        out.flush();
        out.close();

    } catch (FileNotFoundException fnfe1) {
        error = fnfe1.getMessage();
    } catch (Exception e) {
        error = e.getMessage();
    }
    return error;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 如何使用新的存储访问框架将文件复制到外部 SD 卡 的相关文章

随机推荐

  • 在大查询中从宽到长重塑(标准 SQL)

    不幸的是 在 BQ 中进行重塑并不像在 R 中那么容易 而且我无法导出该项目的数据 这里是输入 date country A B C D 20170928 CH 3000 3 121 13 3200 20170929 CH 2800 31
  • %ENV 不起作用,我无法使用共享库

    我无法使用 ENV在我的 Perl 脚本上使用 var 来使用 Oracle 库 BEGIN ORACLE HOME usr lib oracle 10 2 0 3 client64 LD LIBRARY PATH ORACLE HOME
  • 如何在 Angular 4 中将对象转换为数组?

    我想转换我的Object数组 这是我的对象 5 0 10 28 0 14 3 0 6 我想要像下面这样的数组 type 5 0 value 10 type 28 0 value 14 type 3 0 value 6 or 5 0 10 2
  • Android杀死进程[重复]

    这个问题在这里已经有答案了 如何通过一次单击杀死整个应用程序 finish 不起作用 它重定向到之前的活动 请指导我 public void onClick View arg0 TODO Auto generated method stub
  • 在 iframe 中创建可排序的 jQuery UI

    在页面上我有一个 iframe 在这个 iframe 中是我需要进行排序的项目的集合 所有 Javascript 都在父页面上运行 我可以访问 iframe 文档中的列表并使用上下文创建可排序 var ifrDoc iframe conte
  • 为什么 postgres 对相同的间隔值显示两种不同的格式?

    我正在帮忙做这件事question尝试更改间隔的格式 from 01 day 22 10 37 to 46 10 37 我给出了一个字符串操作的解决方案 但后来我发现 postgres 可以在两种不同的格式上显示相同的间隔 SELECT 2
  • 如何从 Javascript 启动两个或多个自定义 URL 协议

    我有一个旧的 html 页面 它创建一个脚本文件并使用以下命令执行它 fsoObject new ActiveXObject Scripting FileSystemObject wshObject new ActiveXObject WS
  • linux下C++中socket监听没有解除绑定

    我有一个监听某个端口的套接字 我将 SIGSTOP 信号发送到在端口上等待的线程 使用accept 并终止它 然后我关闭我等待的套接字的 fd 但对于我的项目的下一次运行 它不允许我再次监听该端口 我的程序是linux下的C 我应该怎么办
  • 使用 .prototype 和 __proto__ 创建子类

    我最近通过编写一些 gnome shell 扩展来学习 javascript 因此我对 Javascript 的理解是由我在 gnome shell javascript 源代码中观察到的示例塑造的 我有一种感觉 我对课程的理解是错误的 只
  • Gson TypeToken 是如何工作的?

    据我了解 在 Java 中 与 C 中的泛型相反 泛型是编译时功能 并通过类型擦除来删除 那么 Gson 的TypeToken真的有效吗 它如何获得对象的泛型类型 来自 JLS 4 6 强调我的 类型擦除是从类型 可能包括参数化类型和类型变
  • Select2 取消/阻止默认 select2:在特定条件下选择 (v.4.0.x)

    我需要向每个 select2 项目添加一个按钮并阻止默认事件 以便只有按钮被触发 我有以下代码 但正常onSelect事件仍然被触发 select on select2 select test2 function test2 e if e
  • 没有给出与所需的形式参数“选项”相对应的参数

    我正在 Net Core 中开发我的第一个应用程序 由于某种原因 我收到此构建错误 错误CS7036没有给出与 LakeViewContext LakeViewContext DbContextOptions LakeView所需的形式参数
  • SQL Server 奇怪的多列分组场景和 OR

    我有一个奇怪的分组场景 并且在找出 SQL 中分组的最佳方法时遇到了一些麻烦 假设我们有下面一张表 CREATE TABLE Item KeyId VARCHAR 1 NOT NULL Col1 INT NULL Col2 INT NULL
  • java.lang.OutOfMemoryError:位图大小超出 VM 预算 - Android

    我在 Android 上开发了一个使用大量图像的应用程序 该应用程序运行一次 填充屏幕上的信息 Layouts Listviews Textviews ImageViews等 用户读取信息 没有动画 没有特效或者任何可以填满记忆的东西 有时
  • TabBarItems 并设置它们的图像大小?

    我目前正在向我的每个选项卡栏项目添加图像 我喜欢的一张图像的尺寸比条形项目的面积大得多 当我在故事板中设置栏项目的图像并运行模拟器时 带有该图像的栏按钮覆盖整个屏幕 现在我认为有一些自动方法可以让图像为每个栏按钮调整大小 遗憾的是事实并非如
  • 如何从航路 3 直接升级到航路 5

    开发由许多客户在许多生产环境中部署的产品 它至少包含一个 Spring Boot 应用程序 我们使用 Flyway 进行数据库模式迁移 从 Spring Boot 1 5 x 升级到 2 0 x 使我们的 Flyway 版本从 3 x 升级
  • InflateException 与来自官方设计库的 FloatingActionButton

    我在使用官方的时候遇到了一个bugFloatingActionButton来自 Google 的支持设计库 这是我的 LogCat android view InflateException Binary XML file line 34
  • 如何加快 Gensim Word2vec 模型加载时间?

    我正在构建一个聊天机器人 因此需要使用 Word2Vec 对用户的输入进行矢量化 我正在使用 Google 提供的包含 300 万个单词的预训练模型 GoogleNews vectors male300 所以我使用 Gensim 加载模型
  • 在 CMake 中获取目标依赖的所有源文件

    使用 CMake 如何获取进入可执行目标的所有源文件的列表 包括该可执行文件所依赖的所有目标中的所有源 我们在代码库中有一个模式 其中构建系统根据源树中的文件名和路径生成初始化程序调用程序 因此 我需要可执行目标所依赖的所有源文件的完整路径
  • Android - 如何使用新的存储访问框架将文件复制到外部 SD 卡

    我正在我的应用程序中实现文件浏览器功能 我知道如何使用 ACTION OPEN DOCUMENT TREE 意图获得外部 SD 卡的持久权限 以及如何使用 DocumentFile 类创建文件夹和删除文件 文件夹 但是 我无法找到将文件复制