ファイル一覧
あるディレクトリ以下のファイル一覧を作らなきゃいけなくなったのでgroovyでスクリプトを書いた。
必要なのは、ディレクトリ構造、ファイル名、更新日付。
ずっとに一度作ったのをベースにしてたんだけど、どんどん直したくなっちゃって結局全然ちがくなっちゃった。
メインはこんなの
import java.io.File import java.text.SimpleDateFormat import java.util.Date // mainパラメータ解析 arguments = MapUtil.arraysToMap(['root', 'output'], args, ['.', 'directory.txt']) println(arguments) // 更新日付フォーマット dateFormat = new SimpleDateFormat('yyyy/MM/dd H:mm') def formatLastModified(file) { return dateFormat.format(new Date(file.lastModified())) } // ディレクトリツリー出力 new File(arguments.get('output')).withWriter { writer | root = new File(arguments.get('root')) rootDepth = FileUtil.getDepth(root) writer.writeLine "+-${root.name}" root.eachFileRecurse { file | indent = '| ' * (FileUtil.getDepth(file) - rootDepth) if (file.file) { writer.writeLine "${indent}\t${file.name}\t\t${formatLastModified(file)}" } if (file.directory) { writer.writeLine "${indent}+-${file.name}" } } }
ユーティリティがこれ
import java.util.HashMap class MapUtil { static arraysToMap(names, values, defaults) { map = new HashMap(); putAll(map, names, defaults) putAll(map, names, values) return map } static putAll(map, names, values) { size = Math.min(names.size(), values.size()) if (size == 0) return for (i in 0...size) { if (values[i] != null) { map.put(names[i], values[i]) } } } }
class FileUtil { static getDepth(file) { if (file.parent != null) { return getDepth(file.parentFile) + 1 } else { return 0 } } }
ユーティリティのメソッドは元のクラスにMixinしたかったんだけど、結局やり方がわかんなかった。
だいぶJavaっぽくなっちゃったな。