flutter 如何實現(xiàn)文件讀寫(使用篇)

flutter文件讀寫可以對磁盤文件進行操作源祈,實現(xiàn)某些業(yè)務場景渔欢,那么我們開始來講下這個文件讀寫操作墓塌。

使用的庫插件(package)
dart:io(用于數(shù)據(jù)處理)
path_provider (用于獲取路勁)

操作步驟
1.獲取正確的本地路徑
2.創(chuàng)建指向文件位置的引用
3.寫入數(shù)據(jù)到文件內(nèi)
4.從文件讀取數(shù)據(jù)

**1.獲取正確的本地路徑 **
我們獲取路勁用的是這個插件
path_provider
可以看到里面提供了兩個獲取路勁的方式

Example

Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;

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

getTemporaryDirectory:【臨時文件夾】
也就是系統(tǒng)可以隨時清空的臨時緩存文件夾,在IOS中對應NSTemporaryDirectory在安卓中對應getCacheDir()

我們來將信息儲存在臨時文件夾中,首先我們創(chuàng)建一個Storage類里面開始寫

class Storage {
  Future<String> get _localPath async {
    final _path = await getTemporaryDirectory();
    return _path.path;
  }
}

**2.創(chuàng)建指向文件位置的引用 **
確定文件儲存位置之后苫幢,導入我們的io庫访诱,使用包里面的File類做泛型,然后獲取路勁并且指向我們的文件名

Future<File> get _localFile async {
  final path = await _localPath;
  return File('$path/counter.txt');
}

**3.寫入數(shù)據(jù)到文件內(nèi) **
現(xiàn)在有了可以使用的File韩肝,直接就可以來讀寫數(shù)據(jù)了触菜,因為我們使用了計數(shù)器,所以只需將證書儲存為字符串格式哀峻,
使用“$counter”即可(解析成整數(shù)方法在下一步)

Future<File> writeCounter(counter) async {
    final file = await _localFile;

    return file.writeAsString('$counter');
  }

4.從文件讀取數(shù)據(jù) ???????
現(xiàn)在可以直接用file類來讀取文件數(shù)據(jù)涡相,然后用int的自帶解析方法來解析我們讀取的String

Future<int> readCounter() async {
    try {
      final file = await _localFile;

      var contents = await file.readAsString();

      return int.parse(contents);
    } catch (e) {
      return 0;
    }
  }

完整代碼

import 'dart:io';
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';

class Storage {
  Future<String> get _localPath async {
    final _path = await getTemporaryDirectory();
    return _path.path;
  }

  Future<File> get _localFile async {
    final path = await _localPath;

    return File('$path/counter.txt');
  }

  Future<int> readCounter() async {
    try {
      final file = await _localFile;

      var contents = await file.readAsString();

      return int.parse(contents);
    } catch (e) {
      return 0;
    }
  }

  Future<File> writeCounter(counter) async {
    final file = await _localFile;

    return file.writeAsString('$counter');
  }
}

class OnePage extends StatefulWidget {
  final Storage storage;

  OnePage({this.storage});

  @override
  _OnePageState createState() => _OnePageState();
}

class _OnePageState extends State<OnePage> {
  int _counter;

  @override
  void initState() {
    super.initState();
    widget.storage.readCounter().then((value) {
      setState(() => _counter = value);
    });
  }

  Future<File> _incrementCounter() async {
    setState(() => _counter++);
    return widget.storage.writeCounter(_counter);
  }

  Future<File> _incrementCounterj() async {
    setState(() => _counter--);
    return widget.storage.writeCounter(_counter);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(
          '$_counter',
          style: Theme.of(context).textTheme.display1,
        ),
      ),
      floatingActionButton: Row(
        children: <Widget>[
          FloatingActionButton(
            onPressed: () => _incrementCounter(),
            child: new Icon(Icons.add),
          ),
          FloatingActionButton(
            onPressed: () => _incrementCounterj(),
            child: new Icon(Icons.title),
          )
        ],
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
    );
  }
}

原文來自 ===> Flutter教程網(wǎng):http://www.flutterj.com/

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市剩蟀,隨后出現(xiàn)的幾起案子催蝗,更是在濱河造成了極大的恐慌,老刑警劉巖育特,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丙号,死亡現(xiàn)場離奇詭異,居然都是意外死亡缰冤,警方通過查閱死者的電腦和手機犬缨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棉浸,“玉大人怀薛,你說我怎么就攤上這事∶灾#” “怎么了枝恋?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長三热。 經(jīng)常有香客問我鼓择,道長,這世上最難降的妖魔是什么就漾? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮念搬,結果婚禮上抑堡,老公的妹妹穿的比我還像新娘。我一直安慰自己朗徊,他們只是感情好首妖,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著爷恳,像睡著了一般有缆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天棚壁,我揣著相機與錄音杯矩,去河邊找鬼。 笑死袖外,一個胖子當著我的面吹牛史隆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播曼验,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼泌射,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鬓照?” 一聲冷哼從身側響起熔酷,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎豺裆,沒想到半個月后纯陨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡留储,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年翼抠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片获讳。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡阴颖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丐膝,到底是詐尸還是另有隱情量愧,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布帅矗,位于F島的核電站偎肃,受9級特大地震影響,放射性物質發(fā)生泄漏浑此。R本人自食惡果不足惜累颂,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凛俱。 院中可真熱鬧紊馏,春花似錦、人聲如沸蒲犬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽原叮。三九已至赫编,卻和暖如春巡蘸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背擂送。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工悦荒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人团甲。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像躺苦,于是被迫代替她去往敵國和親身腻。 傳聞我的和親對象是個殘疾皇子匹厘,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345