【Flutter】アプリ内ストレージに書き込んだファイルをアプリ外から確認したい
path_providerライブラリで、アプリ内ストレージにファイルを保存する際、
デバッグ時などにアプリ外から参照・確認したい場合はどうしたらいいのか、とふと思ったので調べてみました。
※ ここで検証として使用する処理は、以下の数行だけです。
final appDir = await getApplicationDocumentsDirectory(); // ← path_providerの関数
final file = File('${outputDir.path}/log.txt');
await file.writeAsString('ログの内容');
path_provider
少しだけpath_providerについても触れておきます。
path_provider
は、ファイルシステム上でよく使われる path を見つけるためのライブラリです。
OS によって使用できる関数があることは注意が必要です。
path_provider の readme から引用
Android
2つの関数の実行結果を例に見ていきます。
- getApplicationDocumentsDirectory() =>
/data/user/0/<packageName>/app_flutter
- getDownloadsDirectory() =>
/storage/emulated/0/Android/data/<packageName>/files/downloads
内部ストレージか外部ストレージかの違いはあるが、両者はどちらもアプリ専門領域
であり、ユーザーからは見えません。(アクセスできません。)
※ (内部か外部かで、制限や容量などは若干異なりますが、ここでは割愛します。)
上記の アプリ専用領域
に関しては、Android の場合は AndroidStudio
を使用すれば確認することができます。
確認方法の手順は以下です。
- Android Studio を開く
- Header メニューから、View/ToolWindow/DeviceExplorer を選択
- 取得したパスを辿り、該当ファイルを選択して表示 or ダウンロード
ユーザーがアクセスできる場所に保存したい場合は、アクセス可能なフォルダ階層を直接指定してあげると、アクセスは可能となります。
final file = File('/storage/emulated/0/Download/output/log.txt');
await file.writeAsString('ログの内容');
iOS
Android と同様に、2つの関数の実行結果を例に見ていきます。
- getApplicationDocumentsDirectory() =>
/var/mobile/Containers/Data/Application/<AppId>/Documents
- getDownloadsDirectory() =>
/var/mobile/Containers/Data/Application/<AppId>/Downloads
Android 同様、これらはどちらもアプリ専門領域
であり、ユーザーからは見えません(アクセスできません)。
上記の アプリ専用領域
に関しては、シミュレーターであれば、Finder
から確認することができます。
確認できるパスは以下です。
/Users/<user>/Library/Developer/CoreSimulator/Devices/<DeviceID>/data/Containers/Data/Application/<AppID>/
実機の場合は、path からは直接確認はできませんが、OS の権限を付与すれば、実機上で直接確認できる(ユーザーがアクセスできる)ようになります。
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
<key>UIFileSharingEnabled</key>
<true/>
iPhone で ファイル
アプリから確認ができるようになります。
備考
-
Android の
Files
アプリで表示される「内部ストレージ」画面のディレクトリ名は、/sdcard/
です。(Android は"SD カード" もあるのでややこしいですが、、、)
「仮想 SD カード ≒ 内部ストレージ ≒ /sdcard」
-
/sdcard
と/storage/emulated/0
は同じディレクトリを指します。
/storage/emulated/0
のシンボリックリンクが/sdcard
みたいです。

NCDC株式会社( ncdc.co.jp/ )のエンジニアチームです。 募集中のエンジニアのポジションや、採用している技術スタックの紹介などはこちら( github.com/ncdcdev/recruitment )をご覧ください! ※エンジニア以外も記事を投稿することがあります
Discussion