[Flutter] path_provider を使ったファイルの読み書き

アプリケーションとして、データを作成して保持したり、読み出したりしたい場合があります
Flutter ではファイルを保存するために、プラグインの path_provider と dart:io ライブラリを使うことができます




Read and Write files

 

こちらの Read and write files このレシピがよくできているので、
これに沿って試してみたいと思います

ファイルをデバイスに保存して読み出す手順はこのようになります

  1. Find the correct local path.
    • ディレクトリパスを取得
  2. Create a reference to the file location.
    • ファイルの保存先を作成
  3. Write data to the file.
    • ファイルにデータを書き込む
  4. Read data from the file.
    • データを保存したファイルから、読み出しをかける

 

Find the correct local path

 

このレシピではファイルを保存するために、プラグインの path_provider と dart:io ライブラリを使います

path_provider は以下のファイルシステムをサポートしています

  1. Temporary directory
    • 一時的なディレクトリでシステムがいつでも必要に応じて自動的に削除される可能性がある
    • getTemporaryDirectory を使用
    • iOS: NSCachesDirectory
    • Android: getCachDir( )
  2. Document directory
    • アプリのドキュメントディレクトリに保存
      アプリがアクセス可能で、ユーザーが削除したり編集したりしないファイルを保存するのに適していて、アプリの削除でこのディレクトリも同時にクリアされる
    • getApplicationDocumentsDirectory を使用
    • iOS: NSDocumentDirectory
    • Android: AppData

尚、このDocument directory は、Android ではInternal Storageに該当します
AndroidのExternal Strageは
getExternalStorageDirectory
を使いますが、iOSなどでは使えない

path_providerを使い Document directory を取得するコードはこのようになります

  • get _localPath
    • この get はDart では getter として扱われ、ファイルの_localPathを取得するメソッドのような働きとなる
  • getApplicationDocumentsDirectory()
    • アプリ専用のファイルを保管するパスを返す
 

Create a reference to the file location

 

ファイルを保存するパスに、Fileクラスを使って保存するファイルを指定

  • $path
    • パラメータのpathをStringとして扱う
      例えばpath = /data/user/0/xxx/app_flutterであれば
      $path/counter.txt = /data/user/0/xxx/app_flutter/counter.txt となる 

Write data to the file

 

これで、fileAsStringを使ってカウンター回数をファイルに書き込みます

 

Read data from the file

 

保存されたファイルのデータをFileクラスを使って読み出し
読み出す時はTry-cathを使い例外を捕捉します

 

Complete example

 

以上をまとめて実際のアプリを例として作成してみます

その前に事前準備として、
path_provider のパッケージをインストールします

最新バージョンの path_provider が pubspec.yaml に設定されています

main.dart

 

実行結果

 

iPhone:

フローティングボタンを4回タップしてみました

1x1.trans - [Flutter] path_provider を使ったファイルの読み書き

一旦終了して、エミュレータのみ起動させると
4回のカウントが残っています

読み出したPATHを表示させるために debugPrint を設定してみます

iOSの実機のパスではないとは思いますが、シミュレータ上ではプライベートな場所に保存されているようです

Android:

フローティングボタンを4回タップしてみました

1x1.trans - [Flutter] path_provider を使ったファイルの読み書き

一旦終了して、エミュレータのみ起動させると
4回のカウントが残っています

Android Studio の Device Explorer でみてみると
app_flutter の下にcounter.txt があり内容は4となっています

1x1.trans - [Flutter] path_provider を使ったファイルの読み書き

References:

Read and write files
path_provider
getApplicationDocumentsDirectory

シェアする

  • このエントリーをはてなブックマークに追加

フォローする