Flutter桌面端开发—— Flutter 文件读写path_provider使用详解

38 min read

添加依赖

flutter pub add path_provider

获取本地目录

虽然获取路径总共有八种,但是在实际应用开发过程中,我们经常使用的有三种,我们分别来获取这三种目录的路径,如下:

/// 获取文档目录文件
Future<File> _getLocalDocumentFile() async {
  final dir = await getApplicationDocumentsDirectory();
  return File('${dir.path}/str.txt');
}

/// 获取临时目录文件
Future<File> _getLocalTemporaryFile() async {
  final dir = await getTemporaryDirectory();
  return File('${dir.path}/str.txt');
}

/// 获取应用程序目录文件
Future<File> _getLocalSupportFile() async {
  final dir = await getApplicationSupportDirectory();
  return File('${dir.path}/str.txt');
}
import 'dart:io';

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {

  String name = "Jimi";

  /// 获取文档目录文件
  Future<File> _getLocalDocumentFile() async {
    final dir = await getApplicationDocumentsDirectory();
    return File('${dir.path}/str.txt');
  }

  /// 获取临时目录文件
  Future<File> _getLocalTemporaryFile() async {
    final dir = await getTemporaryDirectory();
    return File('${dir.path}/str.txt');
  }

  /// 获取应用程序目录文件
  Future<File> _getLocalSupportFile() async {
    final dir = await getApplicationSupportDirectory();
    return File('${dir.path}/str.txt');
  }

  /// 读取值
  Future<void> readString() async {
    try {

      final file = await _getLocalDocumentFile();
      final result  = await file.readAsString();
      print("result-----$result");

      final file1 = await _getLocalTemporaryFile();
      final result1  = await file1.readAsString();
      print("result1-----$result1");

      final file2 = await _getLocalSupportFile();
      final result2  = await file2.readAsString();
      print("result2-----$result2");


    } catch (e) {
    }
  }

  /// 写入数据
  Future<void> writeString(String str) async {
    final file = await _getLocalDocumentFile();
    await file.writeAsString(name);

    final file1 = await _getLocalTemporaryFile();
    await file1.writeAsString(name);

    final file2 = await _getLocalSupportFile();
    await file2.writeAsString(name);
    print("写入成功");
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(title: Text("path_provider"),),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(name,
                style: TextStyle(
                    color: Colors.pink,
                    fontSize: 30
                ),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: (){
                  writeString(name);
                },
                child: Text("存入本地目录"),
              ),
              ElevatedButton(
                onPressed: (){
                  readString();
                },
                child: Text("读取值"),
              ),
            ],
          ),
        ),
      )
    );
  }
}