Flutter 文件讀寫(xiě)

在某些時(shí)候可能需要下載或保存文件到手機(jī)本地,這時(shí)候使用文件讀寫(xiě)接口可以實(shí)現(xiàn)。

在 Flutter 里實(shí)現(xiàn)文件讀寫(xiě),需要使用 path_provider 和 dart 的 io 模塊。path_provider 負(fù)責(zé)查找 iOS/Android 的目錄文件,IO 模塊負(fù)責(zé)對(duì)文件進(jìn)行讀寫(xiě)。

首先安裝依賴(lài):

dependencies:
  path_provider: ^0.4.1

通常來(lái)說(shuō)會(huì)有以下幾個(gè)步驟:

  • 找到正確的本地路徑。
  • 創(chuàng)建對(duì)文件位置的引用。
  • 將數(shù)據(jù)寫(xiě)入文件。
  • 從文件中讀取數(shù)據(jù)。

本地路徑

path_provider 插件提供了一種平臺(tái)不可知的方式來(lái)訪(fǎng)問(wèn)設(shè)備文件系統(tǒng)上的常用位置。 該插件當(dāng)前支持訪(fǎng)問(wèn)兩個(gè)系統(tǒng)文件位置:

  • 臨時(shí)目錄: 一個(gè)臨時(shí)目錄(緩存),系統(tǒng)可以隨時(shí)清除。 在 iOS 上,這對(duì)應(yīng)于 NSTemporaryDirectory() 返回的值。 在 Android 上,這是 getCacheDir() 回的值。
  • 文檔目錄:應(yīng)用程序的目錄,用于存儲(chǔ)只有它可以訪(fǎng)問(wèn)的文件。 只有當(dāng)應(yīng)用程序被刪除時(shí),系統(tǒng)才會(huì)清除目錄。 在 iOS 上,這對(duì)應(yīng)于 NSDocumentDirectory。 在 Android 上這是 AppData 目錄。

接下來(lái)使用 path_provider 查找本地路徑。

import 'package:path_provider/path_provider.dart';

localPath() async {
    try {
        var tempDir = await getTemporaryDirectory();
        String tempPath = tempDir.path;

        var appDocDir = await getApplicationDocumentsDirectory();
        String appDocPath = appDocDir.path;

        print('臨時(shí)目錄: ' + tempPath);
        print('文檔目錄: ' + appDocPath);
    }
    catch(err) {
        print(err);
    }
}

// 臨時(shí)目錄: /data/user/0/com.example.myapp/cache
// 文檔目錄: /data/user/0/com.example.myapp/app_flutter

文件位置引用

一旦我們知道在哪里存儲(chǔ)文件,我們需要?jiǎng)?chuàng)建一個(gè)文件的完整位置的引用。 我們可以使用 dart:io 庫(kù)中的 File 類(lèi)來(lái)實(shí)現(xiàn)此目的。

localFile(path) async {
    return new File('$path/counter.json');
}

讀寫(xiě)文件

在對(duì)文件引用之后,就可以對(duì)文件進(jìn)行讀寫(xiě)操作了。

// 讀取 json 數(shù)據(jù)
readJSON() async {
    try {
        final file = await localFile(await localPath());
        String str = await file.readAsString();
        return json.decode(str);
    }
    catch (err) {
        print(err);
    }
}

// 寫(xiě)入 json 數(shù)據(jù)
writeJSON(obj) {
    try {
        final file = await localFile(await localPath());
        return file.writeAsString(encode(obj));
    }
    catch (err) {
        print(err);
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱(chēng)項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AGI閱讀 16,009評(píng)論 3 119
  • 原博客地址:https://www.cnblogs.com/yangyxd/p/9232308.html Flut...
    西瓜太郎123閱讀 1,167評(píng)論 0 17
  • 厭倦了微博的嘈雜, 想躲掉朋友圈的攀比炫耀, 大量的垃圾信息占用著我的腦容量, 每日看著朋友們發(fā)的各種看起來(lái)精彩的...
    亦白閱讀 371評(píng)論 0 0
  • 2016.4.8第一次上陳浪老師的九型工作坊,經(jīng)過(guò)復(fù)訓(xùn)和二階三階的學(xué)習(xí),還有不斷地參加共修活動(dòng),從一開(kāi)始找到自己模...
    竺子閱讀 213評(píng)論 0 0