关于安卓文件复制的杂谈(一)文件复制,文件夹复制

背景

一些很基础的东西,往往用起来,找起来,乱七八糟,所以特此记录

环境

win10,jdk8+,as4+

备注

不考虑安卓沙箱机制,这里讲解的是思路,示例中,是以应用内部目录进行测试

开发

把一个文件,复制到另外一个目录

这里是比较简单的,注意的点就是:
(1)判断目表目录是否存在,否则创建后再进行复制
(2)源文件是否存在
核心代码如下:

    public static boolean copyFile(String sourceFilePath, String targetFolderPath) {try {new File(targetFolderPath).mkdirs();File sourceFile = new File(sourceFilePath);File targetFile = new File(targetFolderPath,sourceFile.getName());InputStream in = new FileInputStream(sourceFile);OutputStream out = new FileOutputStream(targetFile);byte[] buffer = new byte[1024];int length;while ((length = in.read(buffer)) > 0) {out.write(buffer, 0, length);}in.close();out.close();return true;} catch (IOException e) {e.printStackTrace();return false;}}

把一个文件夹里面的东西,复制到另外一个文件夹

这里去看网上的资料,大坑,迫不得已,花费了几十分钟踩坑,才得出这个方法。
思路如下:

基础文件判断

(1)判断目标文件夹是否存在,否则创建
(2)判断源文件夹是否存在,否则报错

判断是目录还是文件

首先,这里要有一个思想,就是如果是复制源是一个目录,那么我们对应的目标源,也应该有一个目录,然后后续再把目录里面的东西复制进去。如果复制源是文件,那么直接复制即可


那么,是不是又涉及到了一个递归逻辑,就是:
如果是目录,就目标源创建后递归数据,如果是文件,则复制?
核心代码如下:

    public static void copyFolder(File sourceFolder, File targetFolder) {if (sourceFolder.isDirectory()) {if (!targetFolder.exists()) {targetFolder.mkdirs();}String[] files = sourceFolder.list();if (files != null) {for (String file : files) {File sourceFile = new File(sourceFolder, file);File targetFile = new File(targetFolder, file);if (sourceFile.isDirectory()) {targetFile.mkdirs();}copyFolder(sourceFile, targetFile);}}} else {try {FileInputStream fis = new FileInputStream(sourceFolder);FileOutputStream fos = new FileOutputStream(targetFolder);byte[] buffer = new byte[1024];int length;while ((length = fis.read(buffer)) > 0) {fos.write(buffer, 0, length);}fis.close();fos.close();} catch (IOException e) {e.printStackTrace();}}}

上述的方法,进行实际测试,效果良好,如有问题,可以及时反馈!!!
tha’s all-----------------------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode-60题:排列序列解法二(原创)

【题目描述】 给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n 3 时, 所有排列如下:"123" 、"132" 、"213" 、"231"、"312"、…

数字化转型:传统行业的新出路?

近年来,数字化转型已成为各行各业的热议话题。许多传统行业正面临着巨大的挑战,例如市场竞争加剧、成本上升、利润率下降等。数字化转型被视为传统行业破局的关键。那么,数字化转型究竟是不是传统行业的新出路呢? 传统行业面临的挑…

Qt 坐标位置转换

Qt 坐标位置转换 文章目录 Qt 坐标位置转换常见的位置坐标转换Qt窗体中常用坐标的区别与获取途径当前光标相对于屏幕的绝对位置当前光标相对于当前窗口的位置鼠标事件发生的位置窗体的位置判断鼠标光标是否悬浮在某个子控件上 从事Qt快一年了 ,在做坐标转换的时候容…

OpenCV4.9.0在Android 开发简介

查看:OpenCV系列文章目录(持续更新中......) 上一篇:使用 Clojure 进行 OpenCV 开发简介 下一篇:暂无 引言: OpenCV是一个跨平台计算机视觉库,广泛用于图像处理、计算机视觉和机器学习等领域…

python网络爬虫实战教学——urllib的使用(3)

文章目录 专栏导读1、urlsplit2、urlunsplit3、urljoin4、urlencode 专栏导读 ✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》,本专栏针对大学生、…

日志集中审计系列(1)--- LogAuditor接收DAS设备syslog日志

日志集中审计系列(1)--- LogAuditor接收DAS设备syslog日志 前言拓扑图设备选型组网需求配置思路操作步骤结果验证前言 近期有读者留言:“因华为数通模拟器仅能支持USG6000V的防火墙,无法支持别的安全产品,导致很多网络安全的方案和产品功能无法模拟练习,是否有真机操作的…

群发短信后的实际效果统计分析

群发短信后的实际效果统计分析是评估短信营销效果的关键环节,有助于企业了解短信发送的效果,并据此优化营销策略。以下是对群发短信实际效果统计分析的详细探讨: 首先,企业需要关注短信的发送成功率。这包括短信是否成功发送至目标…

TinTin Web3 Bounty 挑战杯开启,Sui 向你发出挑战邀请!

2024 年开年最火的是什么? 对 Web3 来说,Bounty 任务应该是普通人获得行业“一杯羹”的重要捷径! 通过深入学习各类 Web3 技术,凭借实战锻炼开发创新项目,就有机会获得各大生态项目方的 Bounty 奖励。 TinTinLand 社…

TSINGSEE青犀数字化、智能化视频技术推动森林防火智慧监管

一、背景分析 中央网络安全和信息化委员会印发《“十四五”国家信息化规划》,明确指出“提升林草生态网络感知能力,完善生态系统保护成效数字化监测评估体系”。这为数字化系统建设引领了方向,中国林业信息化建设迈入了新的阶段,全…

HTML5语法总结

文章目录 一.HTML基本框架二.标题标签三.段落标签四.换行与水平线标签五.文本格式化标签(加粗、倾斜、下划线、删除线)六.图像标签扩展:相对路径,绝对路径与在线网址 七.超链接标签八.音频标签九.视频标签十.列表标签十一.表格标签扩展:表格结构标签合并…

[C/C++] -- 链表

C/C 中链表是一种常见的数据结构,用于存储和组织数据。链表由节点(Node)组成,每个节点包含数据和指向下一个节点的指针。链表相对于数组的优势在于可以动态地分配内存,插入和删除操作效率高,但访问元素的随…

MacOS 电脑如何通过自带terminal终端连接PostgreSQL

1、安装Postgre SQL客户端工具 brew install postgresql 2、连接到PostgreSQL (1)创建远程连接 psql -h hostname -U username -d database 其中,hostname 是 PostgreSQL 服务器的主机名或 IP 地址,username 是您的 PostgreS…

机器学习 - 预测训练模型

接着上篇博客机器学习-训练模型做进一步说明。 There are three things to make predictions (also called performing inference) with a PyTorch model: Set the model in evaluation mode (model.eval())Make the predictions using the inference mode context manager (…

学点Java_Day6_基于Copyright和Actions On Save的IDEA自动更新文件最后编辑时间的方法研究(IDEA2021.2及以上)

0 版本要求 IDEA2021.2及以上,我用的IntelliJ IDEA 2023.2.4 1 操作 1.1 Copyright设置 ① CtrlAltS打开设置(Settings)→ Editor → Copyright   ② Copyright → Copyright Profiles → → 取名 → OK   ③ 复制下面内容到框里&am…

java多线程使用与踩坑

SpringBoot使用多线程简单方法:地址 线程安全查阅资料参考:地址 背景: 经过上述资料查看,我想写个方法(依靠notify()唤醒,依靠wait()等待)实现两个线程轮流打印。 实现: 1.线程池配…

[Qt学习笔记]Qt使用MFC编译生成dll库在无编程环境电脑出现无法加载dll的问题

目录 1、 问题介绍2、 问题分析3、 问题总结和思考 1、 问题介绍 在项目实践中,使用Qt调用了一个vs创建的dll库,在本机上编译和release后的exe可以加载对应的dll文件,将exe拷贝到有vs编程环境的电脑上也可以加载对应的dll文件,但…

Java基础面试题(三)

1. 和 equals 的区别? 操作符: 是一个比较操作符,用于比较两个对象的引用是否相等。也就是说,它检查两个对象引用是否指向内存中的同一位置。对于基本数据类型(如 int, char, boolean 等), 用…

Centos7部署单节点MongoDB(V4.2.25)

🎈 作者:互联网-小啊宇 🎈 简介: CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…

Java面试题(Spring篇)

💟💟前言 ​ 友友们大家好,我是你们的小王同学😗😗 今天给大家打来的是 Java面试题(Spring篇) 希望能给大家带来有用的知识 觉得小王写的不错的话麻烦动动小手 点赞👍 收藏⭐ 评论📄 小王的主页…

[STM32] Keil MDK 新建工程编译不通过(warning: #2803-D和Error: L6218E)解决方法备忘

按照野火的PDF教程的第4章:[野火]《RT-Thread 内核实现与应用开发实战—基于STM32》.pdf 新建 Keil MDK 工程,工程设置完成后点击编译按钮,编译不通过: RTE\Device\ARMCM3\startup_ARMCM3.c(75): warning: #2803-D: unrecognize…