#12 Dartで学ぶファイル読み書きの基本
Dartのファイル操作は、dart:ioというライブラリを使って行います。この記事では、Dartにおけるファイル操作の基本を、つまずきやすいポイントも含めて解説します。
ファイルを読み込む
import 'dart:io';
void main() {
var content = File('data.txt').readAsStringSync();
print(content);
}
Fileクラスにファイルパスを渡してインスタンスを作り、readAsStringSync()で内容を丸ごと文字列として読み込みます。行ごとに処理したい場合は、readAsLinesSync()を使うと1行ずつの文字列のリスト(List<String>)として取得できます。
ファイルに書き込む
File('data.txt').writeAsStringSync('こんにちは');
デフォルトでは既存の内容を上書きします。既存の内容を残したまま末尾に追記したい場合は、mode: FileMode.appendを指定します。
File('data.txt').writeAsStringSync('追記分', mode: FileMode.append);
非同期の書き方
Dartには、処理が終わるまで待つSyncが付いた書き方に加え、待たずに他の処理を進められる非同期の書き方もあります。
var content = await File('data.txt').readAsString();
特にFlutterアプリでは、ファイルI/Oのような時間のかかる処理を同期版(Sync付き)のまま呼んでしまうと、その間UI(画面)がフリーズしたように固まってしまいます。ユーザーの操作を止めたくない場面では、非同期版を積極的に使うのがDartでの定石です。
ファイルの存在確認とエラー処理
存在しないファイルを読み込もうとすると例外が発生します。事前にexistsSync()で存在確認するか、try-catchで例外を捕まえて処理すると安全です。
if (await File('data.txt').exists()) {
var content = await File('data.txt').readAsString();
} else {
print('ファイルが見つかりません');
}
Dartならではの注意点
dart:ioライブラリは、Flutterでスマートフォンアプリを作る際、Web版のFlutter(ブラウザ上で動くアプリ)では一部の機能が使えないことがあります。Webのブラウザ環境にはローカルファイルシステムへの直接アクセスという概念自体が無いためです。ファイル操作を含むコードを書く際は、どのプラットフォーム(モバイル/デスクトップ/Web)向けのアプリを作っているかを意識しておく必要があります。また、ファイルパスの区切り文字はOSによって異なるため、複数プラットフォームに対応する場合はpackage:pathパッケージを使ってパスを組み立てると安全です。
まとめ
Dartのファイル操作はdart:ioのFileクラスが基本です。同期・非同期の書き方の違い、存在確認とエラー処理、プラットフォームによる制限を意識しながら書くと、より安全なコードになります。
本ページはプロモーションを含みます。
参考書籍(PR)
Dartをもっと学びたい方には「ゼロから学ぶFlutterアプリ開発」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿