
最近 , 我一直在研究 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\"http:// 迭代音樂庫目錄中的每個目錄// 這一層應該是藝術家目錄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|慎選!這些手機我不建議購買
