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踩坑排雷】第7课:巨型 build 函数坑|全部 UI 写在同一个 build,维护难、隐性异常
android·flutter·ios·移动开发·跨平台·dart·声明式ui
程序员老刘11 小时前
从短剧App的bug看响应式编程在AI时代的优势
flutter·ai编程·客户端
恋猫de小郭20 小时前
最近 Android 有什么更新:Android Dev Summit 2026 技术解读
android·前端·flutter
好的佩奇1 天前
Dart 之类修饰符
android·flutter·dart
好的佩奇012 天前
Dart 之类修饰符
android·flutter·dart
Jewel1052 天前
文字为什么总是不居中!记录一个bug
android·flutter·ios
2601_949847753 天前
Form-data 跨端三方库仓颉适配全流程
前端·javascript·flutter
大龄秃头程序员3 天前
Flutter 中我为什么把 GetX 定位为高效率方案,而不是默认架构方案
flutter
传奇开心果编程3 天前
组合优先开发范式:从汉字造字原理到声明式UI组件组合思想
android·flutter·ios·swiftui·移动开发·harmonyos·android jetpack
2501_944521593 天前
Ramda 跨端三方库仓颉适配全流程
开发语言·javascript·flutter·php