Photoshop Extensionの開発26 フォルダー内のファイルを取得する
大量のデータを処理する時に必ず直面するのがフォルダー内のファイルをサブフォルダーまで遡って全て取得する方法である。今回再帰的にファイルを取得する方法をパネル側、jsx側の両方で解説する。パネル側の方はNode jsのネイティブモジュールを使用する事で簡単にファイル情報を取得できる。
おおよそよくある再帰的処理なのですが解説。まずウインドウダイアログから該当のフォルダーを選択。事前にファイルリスト用の空の配列を作成。再帰的にフォルダーからファイルを取得関数に事前にウインドウから取得したフルパスを指定(f.data[0]となっているのはウインドウから取得したデータオブジェクト型でdataプロパティーの一つ目の配列にパスデータが入っているから。たとえウインドウで一つのファイルしか選択していなかったとしても配列形式で指定するのは例外ではない)その後readdirSyncでファイルのパスをフォルダーパスから取得。
ただしこの時取得できるのはフォルダーパスからみた相対パスなので絶対パスに変換する。
フォルダーのパスとファイルのパスを繋げれば絶対パスになるのでmapで簡単に変換できる。その後各種ファイルがフォルダーかどうか調べる。
isFolder関数で該当のファイルがフォルダーかどうか調べつつ念の為ファイル自体が存在するかどうかも確認。フォルダーだったらtrueを返してgetFiles関数がgetFiles関数自身を呼び出して再帰的に処理。
ファイルだったら空だった配列にファイルを追加してゆく。最終的にファイルリストを取得できる。またファイル名、拡張子等の各種ファイル情報を取得したい場合はpath.parse()メソッドでファイル情報を調べる事ができる。
今回は全てのファイルを取得した後にmapで変換。変換後は各配列にファイル情報の入ったオブジェクトが格納されるので注意。次回はjsxから取得する方法。
*2020年8月9日 fs.existsメソッドは非推奨になったのでコードを修正しました。