贵州做网站公司
贵州做网站公司~专业!靠谱!
10年网站模板开发经验,熟悉国内外开源网站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等网站程序,可为您提供网站建设,网站克隆,仿站,网页设计,网站制作,网站推广优化等服务。我们专注高端营销型网站,企业官网,集团官网,自适应网站,手机网站,网络营销,网站优化,网站服务器环境搭建以及托管运维等。为客户提供一站式网站解决方案!!!

如何批量修改文件格式(Android如何批量修改文件格式/文件名)

来源:网络转载 时间:2024-05-03 16:49:00

前言

有时候可能会遇到需要批量修改文件格式的需求,但百度了很久都没有找到相关的应用什么的,于是学过两天 Android 的我想自己去弄一个 APP 来实现这个需求。

1. 使用 shell 脚本批量修改文件格式/文件名

第一种方法是我第一次成功的方法,因为 android 本身也是 Linux 改过来的,所以使用一点点 shell 命令应该很合理吧?而且这种方法应该无视任意版本的 Android(像 Android 1-11)都能成功,下面就简单介绍下这种方法。

shell 就是命令行,一般来说在 Linux 对单个文件我们可以使用 mv oldFileName newFileName 去修改文件名(包含文件格式),如果要批量的去修改,那么加一个循环就可以实现,代码如下

#遍历所有.mp4文件fornamein*.mp4do#修改文件格式,随便取个名字mv"$name""${name%.mp4}.myvideo"done

然后把存放代码的文本文件后缀名修改成 .sh,再随便找一个可以执行 .sh(脚本文件)或者能够开启终端(如果是自己开终端的话记得 chmod 777 script.sh 修改文件权限)的应用就可以执行代码了,我使用的是 MT管理器去执行 (酷安里面可以下一个,酷安 -> MT管理器)

说说这种方法的优劣

优点,没有涉及太多代码知识,其中的 shell 脚本也只有一个 for 循环,代码也很容易修改成符合相应需求的代码,可以说是 0 负担解决需求,而且不同版本的 Android 只要能够执行脚本文件就能够做到批量修改,兼容性强
缺点,缺点就很明显,需要下载应用(你又不知道这个应用有没有风险,可能有广告,也不会有人专门为了批处理文件去写个APP,除非是你个人开发)

2. 使用 documentFile 批量修改文件格式/文件名

这个方法才是符合文章主题的方法,自己写一个 APP 来实现这个需求。

在前面说过,脚本文件才是我第一个成功的方案,在此之前我一直都视图用 java 去实现批处理文件,这在 Android 10(API 29)之前按照网上的大部分教程都能够实现,但是 Android 10 启用分区存储,每个应用只能够访问自身专属空间和 Android 规定的几个外部共享存储空间(比如相册里面的媒体内容,已经 Download 文件夹下面的文件)
这个时候使用 File#renameTo() 这种常规的方式在 android 10 上的机子就行不通了,你需要获得相应的权限才能够对文件进行操作(其他应用的产生的文件,你自己应用的文件还是可以任意修改的)。

一开始我只是想对视频文件修改格式,按照 android 官方文档里面介绍的媒体文件更新(链接),我们需要在捕获平台抛出的RecoverableSecurityException来征得用户同意修改文件,这不就于我们文章的标题背道而驰了吗?我要一个个去申请权限,那我还不如直接用本地的文件管理器去一个个重命名文件,也可以修改文件格式/文件名
舍弃官方给出的媒体文件更新的方法,采用官方文档给出的另一种方案,从共享存储空间访问文档和其他文件,用户只需要授予一次批处理文件所在目录的访问权限,就可以对目录下的文件进行任意修改,有了思路就可以写出相应的逻辑,代码如下

.../***使用ACTION_OPEN_DOCUMENT_TREEintent操作*支持用户选择特定目录,授予应用对该目录中所有文件*和子目录的访问权限*/publicvoidgetPermission(){Intentintent=newIntent(Intent.ACTION_OPEN_DOCUMENT_TREE);intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);startActivityForResult(intent,STORAGE_PERMISSION_REQ_CODE);}...@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){super.onActivityResult(requestCode,resultCode,data);if(resultCode==Activity.RESULT_OK&&requestCode==STORAGE_PERMISSION_REQ_CODE){if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){//拿到目录的UrifolderUri=data.getData();...}}}

通过上面的代码拿到目录的 Uri 后就可以遍历其中的文件并且可以对它们为所欲为,申请过一次权限以后就不需要再申请了,因此我们可以对目录的 Uri 进行数据持久化处理(将 Uri 转成 String 后使用 SharedPreferences )

接下来是遍历文件和修改文件格式的代码

//folderUri是你获取到的目录UriDocumentFile[]files=DocumentFile.fromTreeUri(this,folderUri).listFiles();for(inti=0;i<files.length;i++){if(files[i].getName().endsWith(".myvideo")){//调用DocumentFile的renameToAPI就可以修改文件名了files[i].renameTo(files[i].getName().replaceAll(".myvideo",".mp4"));}}//.mp4tomyvideo也是上面的代码反转一下

至此我们就完成了相应的需求啦

关于 DocumentFile 和 DocumentsContract**

文档里面说 DocumentFile 有大量开销,建议用 DocumentsContract,但我实在是找不到相关的遍历操作,API 里面讲了一点,但我这种 Android 小白不是很能看得懂啊,所以还是用了 DocumentFile 相应的 API

需求扩展

我写的布局文件里面只有三个按钮,如果需要实时观察变化的话,可以引入一些文件选择器框架进行查看,比如 github 里面的 FilePicker(我没有试过)

抖音(Tiktok)是由北京字节跳动科技有限公司(ByteDance)孵化的音乐创意短视频社交网站。它于2016年9月20日上线,主要面向全年龄段的用户,尤其是...

飞极速为您提供高清在线电影、电视剧大全、动画片,综艺等,飞极速在线更新及时,播放速度快,给您带来最好的观影体验!飞极速在线,免费提供日本新番动漫、最新电影和最新...

《南华早报》(英语:South China Morning Post, SCMP)和星期日出版的《星期日南华早报》(英语:Sunday Morning Post...

电子银行口令卡是指以矩阵形式印有若干字符串的卡片,每个字符串对应一个唯一的坐标。下面是小编为大家整理的电子银行口令卡是什么?电子银行口令卡的使用方法,欢迎阅读!希望对大家有所帮助!电子银行口令卡是什么?电子银行口令卡是工行最出的电子银行安全工具,是保护客户资金不受损失而设置的又一道防线。电子银行口令卡相当于一种动态的电子银行密码。电子银行口令卡怎么用?电子银行口令卡的使用方法首先你携带本人有效*件...

少林寺上市了没有?不是“少林寺还不是上市公司。少林寺能否上市需要看它的历史沿革、法律、财务等方面的问题,不过大体判断,上市的障碍应该比较小,因为现在有了科创板,尺度进一步放宽,未来如果上交所和深交所采用注册制,上市的可能性就大了。”少林寺门票多少钱?少林寺门票为80元/人。自2018年9月20日起,《河南省降低国有景区门票价格实施方案》正式执行。河南省发改委宣布降低4家省管...

跑部钱进是什么意思?所谓“跑部钱进"”,是指利用当地驻京办的网络,在各部委之间进行“沟通”,从而达到为项目寻找资金的目的。不仅“高层”早已“心照不宣”,而且“底层”也是衡量一个干部能力和政绩的重要标准。“跑钱进"”混乱的最根本原因是&l...

TOP