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);
相关推荐
林九生2 小时前
【Flutter】Flutter 拍照/相册选择后无法显示对话框问题解决方案
前端·javascript·flutter
●VON3 小时前
Flutter组件通信详解:父子组件交互的最佳实践
javascript·flutter·华为·交互·harmonyos·von
火柴就是我4 小时前
代码记录android怎么实现状态栏导航栏隐藏
android·flutter
weixin_443478514 小时前
FLUTTER组件学习之进度指示器
学习·flutter
始持4 小时前
第十九讲 深度布局原理与优化
前端·flutter
人月神话Lee4 小时前
一个iOS开发者对Flutter中Widget、Element和RenderObject的理解
前端·flutter·ios
始持4 小时前
第二十讲 权限与设备能力
前端·flutter
国医中兴5 小时前
ClickHouse监控与运维策略:从告警到故障处理
flutter·harmonyos·鸿蒙·openharmony