【Flutter】【path_provider】path_provider文件系统

在这里插入图片描述

package:path_provider

一个能使用本地文件系统的插件,比如获取缓存区域文件夹等。
支持全平台,但是部分功能针对于不同的平台有限制

  • 读取文件
  • 或者文件地址等

功能:

功能:
1.读取文件
2. 或者文件地址等
|Directory |Android | iOS | Linux |macOS |Windows |
Temporary ✔️ ✔️ ✔️ ✔️ ✔️
Application Support ✔️ ✔️ ✔️ ✔️ ✔️
Application Library ❌️ ✔️ ❌️ ✔️ ❌️
Application Documents ✔️ ✔️ ✔️ ✔️ ✔️
External Storage ✔️ ❌ ❌ ❌️ ❌️
External Cache Directories ✔️ ❌ ❌ ❌️ ❌️
External Storage Directories ✔️ ❌ ❌ ❌️ ❌️
Downloads ❌ ❌ ✔️ ✔️ ✔️

使用实例和代码:
 Future<String> _getTemporaryDirectory() async {
   final dir = await getTemporaryDirectory();
   return dir.toString();
 }
 Future<String> _getApplicationSupportDirectory() async {
   final dir = await getApplicationSupportDirectory();
   return dir.toString();
 }
 Future<String> _getLibraryDirectory() async {
   final dir = await getLibraryDirectory();
   return dir.toString();
 }
Future<String> _getApplicationDocumentsDirectory() async {
  final dir = await getApplicationDocumentsDirectory();
  return dir.toString();
}
 Future<String> _getExternalStorageDirectory() async {
   final dir = await getExternalStorageDirectory();
   return dir.toString();
 }
 Future<String> _getExternalCacheDirectories() async {
   final dir = await getExternalCacheDirectories();
   return dir.toString();
 }

 Future<String> _getDownloadsDirectory() async {
   final dir = await getDownloadsDirectory();
   return dir.toString();
 }
获取DocumentsDirectory文件的具体地址,并插件一个txt文件
 /*
 读写磁盘的操作
 **/
 //获取到文件
 Future<File> getFile(String str) async {
   final dir = await getApplicationDocumentsDirectory();
   debugPrint('$dir'.toString());
   String filepath = "${dir.path}\\${str}.txt";
   debugPrint("filepath $filepath");
   // Directory newdirectory = Directory(filepath);//文件夹也可以创建
   File file = File(filepath);
   if (!file.existsSync()) {
     //判断是否存在文件,如果不存在就创建他,异步创建
     file.createSync();
     debugPrint('create success');
   }

   return File(filepath);
 }
读取文件并写入,mode: FileMode.append不覆盖
 Future<void> dowritestr(String str) async {
   final file = await getFile("test");
   //append 不覆盖添加
   file.writeAsStringSync('JACK', mode: FileMode.append);
   file.writeAsStringSync('TOm', mode: FileMode.append);
   debugPrint('success');
 }

获取文件并读取
 Future<String> doread(String str) async {
   final file = await getFile("test");
   //append 不覆盖添加

   debugPrint('success');
   return file.readAsString();
 }

代码:
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// ignore_for_file: public_member_api_docs

import 'dart:io';

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Path Provider',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Path Provider'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String addstr = '这边显示文档的位置';

  Future<String> _getTemporaryDirectory() async {
    final dir = await getTemporaryDirectory();
    return dir.toString();
  }

  Future<String> _getApplicationSupportDirectory() async {
    final dir = await getApplicationSupportDirectory();
    return dir.toString();
  }

  Future<String> _getLibraryDirectory() async {
    final dir = await getLibraryDirectory();
    return dir.toString();
  }

  Future<String> _getApplicationDocumentsDirectory() async {
    final dir = await getApplicationDocumentsDirectory();
    return dir.toString();
  }

  Future<String> _getExternalStorageDirectory() async {
    final dir = await getExternalStorageDirectory();
    return dir.toString();
  }

  Future<String> _getExternalCacheDirectories() async {
    final dir = await getExternalCacheDirectories();
    return dir.toString();
  }

  Future<String> _getDownloadsDirectory() async {
    final dir = await getDownloadsDirectory();
    return dir.toString();
  }

  /*
  读写磁盘的操作
  **/
  //获取到文件
  Future<File> getFile(String str) async {
    final dir = await getApplicationDocumentsDirectory();
    debugPrint('$dir'.toString());
    String filepath = "${dir.path}\\${str}.txt";
    debugPrint("filepath $filepath");
    // Directory newdirectory = Directory(filepath);//文件夹也可以创建
    File file = File(filepath);
    if (!file.existsSync()) {
      //判断是否存在文件,如果不存在就创建他,异步创建
      file.createSync();
      debugPrint('create success');
    }

    return File(filepath);
  }

  Future<void> dowritestr(String str) async {
    final file = await getFile("test");
    //append 不覆盖添加
    file.writeAsStringSync('JACK', mode: FileMode.append);
    file.writeAsStringSync('TOm', mode: FileMode.append);
    debugPrint('success');
  }

  Future<String> doread(String str) async {
    final file = await getFile("test");
    //append 不覆盖添加

    debugPrint('success');
    return file.readAsString();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
          child: ListView(
        padding: EdgeInsets.all(10),
        children: [
          Center(child: Text(addstr)),
          Container(
            margin: EdgeInsets.all(10),
            child: ElevatedButton(
                onPressed: () async {
                  String newadd = await _getTemporaryDirectory();
                  setState(() {
                    addstr = newadd;
                  });
                },
                child: const Text('获取应用临时目录(全平台支持)getTemporaryDirectory')),
          ),
          Container(
            margin: EdgeInsets.all(10),
            child: ElevatedButton(
                onPressed: () async {
                  String newadd = await _getApplicationSupportDirectory();
                  setState(() {
                    addstr = newadd;
                  });
                },
                child: const Text(
                    '获取应用程序支持目录(全平台支持)getApplicationSupportDirectory')),
          ),
          Container(
            margin: EdgeInsets.all(10),
            child: ElevatedButton(
                onPressed: () async {
                  if (Platform.isMacOS || Platform.isMacOS) {
                    String newadd = await _getLibraryDirectory();
                    addstr = newadd;
                  } else {
                    String newadd = '不支持';
                    addstr = newadd;
                  }
                  setState(() {});
                },
                child: const Text('获取程序持久文件目录(ios macos)getLibraryDirectory')),
          ),
          Container(
            margin: EdgeInsets.all(10),
            child: ElevatedButton(
                onPressed: () async {
                  String newadd = await _getApplicationDocumentsDirectory();
                  addstr = newadd;

                  setState(() {});
                },
                child: const Text(
                    '获取应用文档目录(全平台)getApplicationDocumentsDirectory')),
          ),
          Container(
            margin: EdgeInsets.all(10),
            child: ElevatedButton(
                onPressed: () async {
                  if (Platform.isAndroid) {
                    String newadd = await _getExternalStorageDirectory();
                    addstr = newadd;
                  } else {
                    String newadd = '不支持';
                    addstr = newadd;
                  }
                  setState(() {});
                },
                child: const Text(
                    '获取外部存储目录(only android)getExternalStorageDirectory')),
          ),
          Container(
            margin: EdgeInsets.all(10),
            child: ElevatedButton(
                onPressed: () async {
                  if (Platform.isAndroid) {
                    String newadd = await _getExternalCacheDirectories();
                    addstr = newadd;
                  } else {
                    String newadd = '不支持';
                    addstr = newadd;
                  }
                  setState(() {});
                },
                child: const Text(
                    '获取外部缓存目录(only android)getExternalCacheDirectories')),
          ),
          Container(
            margin: EdgeInsets.all(10),
            child: ElevatedButton(
                onPressed: () async {
                  if (Platform.isAndroid) {
                    String newadd = await _getExternalStorageDirectory();
                    addstr = newadd;
                  } else {
                    String newadd = '不支持';
                    addstr = newadd;
                  }
                  setState(() {});
                },
                child: const Text(
                    '外部存储目录(单独分区)(only android)getExternalStorageDirectory')),
          ),
          Container(
            margin: EdgeInsets.all(10),
            child: ElevatedButton(
                onPressed: () async {
                  if (Platform.isLinux ||
                      Platform.isMacOS ||
                      Platform.isWindows) {
                    String newadd = await _getDownloadsDirectory();
                    addstr = newadd;
                  } else {
                    String newadd = '不支持';
                    addstr = newadd;
                  }
                  setState(() {});
                },
                child: const Text(
                    '获取下载文件存储目录地址(only Linux,MacOS,Windows)getDownloadsDirectory')),
          ),
          Container(
            margin: EdgeInsets.all(10),
            child: ElevatedButton(
                onPressed: () async {
                  dowritestr('TEST');
                },
                child: const Text('写入数据的操作')),
          ),
          Container(
            margin: EdgeInsets.all(10),
            child: ElevatedButton(
                onPressed: () async {
                  String retxt = await doread('TEST');

                  setState(() {
                    addstr = retxt;
                  });
                },
                child: const Text('读取数据')),
          ),
        ],
      )),
    );
  }
}


截图:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值