最近 , 我一直在研究 Groovy 是如何简化略微繁琐的 Java 的 。 在这篇文章中 , 我开始了一个简短的系列 , 通过创建一个分析我的音乐目录的工具来演示 Groovy 脚本 。
在本文中 , 我将演示 groovy.File 类如何扩展和精简 java.File 并简化其使用 。 这为查看音乐文件夹的内容提供了一个框架 , 以确保预期的内容(例如 , cover.jpg 文件)就位 。 我使用 JAudiotagger 库 来分析音乐文件的标签 。
安装 Java 和 GroovyGroovy 基于 Java , 需要安装 Java 。Java 和 Groovy 的最新和稳定的版本可能都在你的 Linux 发行版的仓库中 。Groovy 也可以直接从 Apache Foundation 网站 安装 。 对于 Linux 用户来说 , 一个不错的选择是 SDKMan , 它可用于获取 Java、Groovy 和许多其他相关工具的多个版本 。 对于本文 , 我使用以下 SDK 版本:
- Java:版本 11.0.12-open 的 OpenJDK 11
- Groovy:版本 3.0.8
我绝大部分的音乐文件都是 FLAC 格式的 , 有一些是 MP3 格式 , 可能还有一小部分是 OGG 格式 。 我选择 JAudiotagger 库的一个原因是它可以透明地处理不同的标签格式 。 当然 , JAudiotagger 是开源的!
那么查看音频标签有什么意义呢?以我的经验 , 音频标签的管理极差 。 (提到音频标签 , )我的脑海中浮现出“粗心”这个词 。 这是标签本身真正存在的问题 , 也可能是出于我自己的学究倾向 。 无论如何 , 这是一个可以通过使用 Groovy 和 JAudiotagger 解决的重要问题 。 不过 , 它不仅适用于音乐收藏 。 许多其他现实世界的问题也适用 , 如需要下沉到文件系统中的目录树来处理在那里找到的内容 。
使用 Groovy 脚本这是此任务所需的基本代码 。 我在脚本中加入了注释 , 这些注释反映了我通常留给自己的(相对简写的)“注释提醒”:
// 定义音乐库目录def musicLibraryDirName = '/var/lib/mpd/music'// 输出 CSV 文件标题行println \"artistDir|albumDir|contentFile\"// 迭代音乐库目录中的每个目录// 这一层应该是艺术家目录new File(musicLibraryDirName).eachDir { artistDir -> // 迭代艺术家目录中的每个目录
// 这一层应该是专辑目录
artistDir.eachDir { albumDir -> // 迭代专辑目录中的每个目录
// 这里应该是内容
// 或相关内容(如 `cover.jpg` , PDF 格式的内页说明)
albumDir.eachFile { contentFile -> println \"$artistDir.name|$albumDir.name|$contentFile.name\"
【激光电视|我如何使用 Groovy 分析我的音乐目录】如上所述 , 我使用 groovy.File 在目录树中移动 。 具体来说:
第 7 行创建一个新的 groovy.File 对象并在其上调用 groovy.File.eachDir() , 第 7 行的 { 和第 18 行的结尾的 之间的代码是传给 eachDir() 的 groovy.Colsue 参数 。
这意味着 eachDir() 为目录中找到的每个子目录执行该代码 。 这类似于 Java lambda(也称为“匿名函数”) 。Groovy 闭包不会像 lambda 那样限制对调用环境的访问(在最新版本的 Groovy 中 , 如果你愿意 , 也可以使用 Java lambda) 。 如上所述 , 音乐库目录中的子目录应该是艺术家目录(例如 , “Iron Butterfly” 或 “Giacomo Puccini”) , 因此 artistDir 是 eachDir() 传递给闭包的参数 。
相关经验推荐
- 三星|三星NEO QLED 8K系列电视发布,搭载全新的Tizen系统
- 索尼Xperia|宁可加钱,也不要受制于同质化,这就是我给大家购机的最大忠告
- 华为mate|打开电视发现看啥都要VIP
- 一加科技|大半个月高强度使用一加Ace Pro,我后悔了吗?
- |戴上它,你也会像我一样摇头晃脑——1MORE Aero空间音频降噪TWS耳机
- 机器|大头哥发过来的炸弹机告诉了我们什么道理
- 音响|电视音响开箱,被声音包围的感觉,有点让人流连忘返
- 折叠屏|客观分析:下半年该选折叠屏还是直屏?我发现预算与体验是关键
- 华为|本来认定pro的,pro后盖没有P40好看,充电这点我确实接受不了22.5W
- 索尼Xperia|慎选!这些手机我不建议购买