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);
相关推荐
xcyxiner38 分钟前
flutter wsl2安装记录(使用宿主机虚拟机)
前端·flutter
Kevin Coding2 小时前
JsonConvert:适用于 Android、鸿蒙与 Flutter 的 JSON 转 Model 插件
android·flutter·harmonyos
iFlyCai17 小时前
Flutter原理深度解析:从架构到渲染的全面剖析(二)
flutter·flutter 三棵树
里欧跑得慢19 小时前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js
iFlyCai1 天前
深入理解Flutter:StatefulWidget生命周期全解析(一)
flutter·dart·状态管理·statefulwidget
xiangxiongfly9151 天前
Flutter video_player总结
flutter·video_player·chewie
见山是山-见水是水2 天前
鸿蒙版 Flutter Video 视频播放组件:播放控制、全屏切换与倍速播放
flutter·音视频·harmonyos
六年码农2 天前
2026最新开源 屏译ScreenTranslator 0.4.4 开源 全屏实时翻译教程
运维·人工智能·flutter·开源
WeiAreYoung2 天前
Flutter+iOS 实现 Live Activity
flutter·ios
恋猫de小郭2 天前
超好用 R8 Configuration Analyzer, 优化你的 App 大小和内存
android·前端·flutter