Dartでディレクトリ作成

Dar言語StreamクラスtoSet()メソッドDart

Dartでディレクトリを作成する手順についてメモ書き。

ディレクトリ作成で使用するパッケージは「dart:io」。
先ずはimportで読み込む。

import 'dart:io';

Directoryクラスにはディレクトリを作成するメソッドとしてcreate()とcreateSync()がある。
create()は非同期処理、createSync()は同期処理で作成する。
Dartオフィシャルは非同期処理のcreate()を推奨している。同期処理だとブロックされる可能性がある、というのが理由らしい。オフィシャル推奨のcreate()で作成してみる。
引数「recursive: true」を指定することで、再帰的にディレクトリを作成する。


ディレクトリ一覧を取得するメソッドとしてDirectoryクラスにはlist()とlistSync()がある。
せっかくなので、作成したディレクトリの一覧を取得してみる。
こちらもlist()は非同期処理、listSync()は同期処理で作成する。list()を試してみる。
引数「recursive: true」を指定することで、再帰的にディレクトリを表示する。
こちらは他に「followLinks」があり「true」にすることでシンボリックリンクを辿って表示するらしい。
list()メソッドはFileSystemEntity型をSreamで返す。「await for」でデータを取得する。

import 'dart:io';

void main() async {
  // ディレクトリを作成。「recursive: true」を設定する事で、再起的にディレクトリを作成する。
  await Directory('./dir/subdir').create(recursive: true);

  // ディレクトリを表示
  await for (var dlist in Directory('./dir').list(recursive: true)) {
    // ディレクトリのパスを出力
    print('PATH: ${dlist.path}');
    // 親ディレクトリを出力
    print('PARENT: ${dlist.parent.path}');
    // URIを出力
    print('URI: ${dlist.uri}');
  }
}

バッチ処理で「親ディレクト名だけを取得する」という事はよくあるので、取得できる形式をいくつか試してみた。
実行結果は以下の通り。

% dart run bin/dir1.dart
PATH: ./dir/subdir
PARENT: ./dir
URI: dir/subdir/

コメント

タイトルとURLをコピーしました