Flutter---文件存储

文件存储是 Flutter 中保存大量数据、图片、文件的解决方案。

添加依赖

复制代码
path_provider: ^2.1.4

添加权限

Dart 复制代码
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
                 android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

引用

复制代码
import 'package:path_provider/path_provider.dart';
文件操作

获取路径各种路径

Dart 复制代码
  // 临时目录(可随时被系统清理)
  Directory tempDir = await getTemporaryDirectory();
  print("临时目录: ${tempDir.path}");
  
  // 应用文档目录(用户数据,备份时会备份)
  Directory docsDir = await getApplicationDocumentsDirectory();
  print("文档目录: ${docsDir.path}");
  
  // 外部存储(Android 的 SD 卡)
  if (Platform.isAndroid) {
    Directory? externalDir = await getExternalStorageDirectory();
    print("外部存储: ${externalDir?.path}");
  }
  
  // 应用支持目录(缓存、数据库等)
  Directory supportDir = await getApplicationSupportDirectory();
  print("支持目录: ${supportDir.path}");

创建文件

Dart 复制代码
 // 获取文档目录
  Directory docsDir = await getApplicationDocumentsDirectory();
  
  // 创建文件对象
  File file = File('${docsDir.path}/my_file.txt');
  
  // 写入内容(自动创建文件)
  await file.writeAsString('Hello Flutter!');
  print("文件创建成功: ${file.path}");

写入内容

Dart 复制代码
// 方式1:写入字符串
  await file.writeAsString('这是内容');
  
  // 方式2:写入字节
  List<int> bytes = [72, 101, 108, 108, 111];
  await file.writeAsBytes(bytes);
  
  // 方式3:追加内容
  await file.writeAsString('追加的内容', mode: FileMode.append);

读取内容

Dart 复制代码
   // 检查文件是否存在
  if (await file.exists()) {
    
    // 读取字符串
    String content = await file.readAsString();
    print("内容: $content");
    
    // 读取字节
    List<int> bytes = await file.readAsBytes();
    print("字节: $bytes");
    
    // 按行读取
    List<String> lines = await file.readAsLines();
    for (var line in lines) {
      print("行: $line");
    }
  } else {
    print("文件不存在");
  }

删除文件

Dart 复制代码
if (await file.exists()) {
    await file.delete();
    print("文件已删除");
  }

复制/移动文件

Dart 复制代码
Directory docsDir = await getApplicationDocumentsDirectory();
  
  File source = File('${docsDir.path}/source.txt');
  File target = File('${docsDir.path}/target.txt');
  
  // 复制
  await source.copy(target.path);
  
  // 移动(先复制再删除)
  await source.copy(target.path);
  await source.delete();
目录操作

创建目录

Dart 复制代码
 Directory docsDir = await getApplicationDocumentsDirectory();
  
  // 创建单级目录
  Directory dir = Directory('${docsDir.path}/my_folder');
  await dir.create();
  
  // 创建多级目录
  Directory deepDir = Directory('${docsDir.path}/folder1/folder2/folder3');
  await deepDir.create(recursive: true);

列出目录内容

Dart 复制代码
Directory docsDir = await getApplicationDocumentsDirectory();
  
  // 列出所有文件和目录
  List<FileSystemEntity> entities = await docsDir.list().toList();
  
  for (var entity in entities) {
    if (entity is File) {
      print("文件: ${entity.path}");
    } else if (entity is Directory) {
      print("目录: ${entity.path}");
    }
  }
  
  // 只列出文件
  List<File> files = await docsDir
      .list()
      .where((entity) => entity is File)
      .map((entity) => entity as File)
      .toList();

删除目录

Dart 复制代码
 if (await dir.exists()) {
    // 删除空目录
    await dir.delete();
    
    // 删除非空目录(递归)
    await dir.delete(recursive: true);
相关推荐
风华圆舞8 小时前
Flutter + 鸿蒙 Intents Kit:页面直达能力的完整接入方案
flutter·ui·华为·harmonyos
韩曙亮8 小时前
【Flutter】Flutter 组件 ④ ( 组件渲染 的 三棵树理论 | Widget 树 → Element 树 → RenderObject 树 )
flutter·element·widget·renderobject
恋猫de小郭10 小时前
Android 17 正式版发布,全新 AI 和各种破坏性更新
android·前端·flutter
kingbal11 小时前
Windows:flutter环境搭建
windows·flutter
911hzh12 小时前
Flutter MethodChannel 跨端通信框架 zh_native_channel:快速入门、优势分析与 Pigeon 对比
flutter
911hzh12 小时前
Flutter 快速搭建新项目:用 Flutter Foundation Kit 一条命令生成带基础架构的 App 模板
flutter
kingbal13 小时前
Flutter:Flutter SDK版本管理工具FVM
android·flutter·ios·android-studio·window
风华圆舞13 小时前
鸿蒙 Flutter 页面怎么感知防窥状态并调整 UI 可见性
flutter·ui·harmonyos
天天开发13 小时前
Flutter状态管理新宠:RiverPod全面解析与实战指南
android·flutter