【问题标题】:cannot create a local file using await getApplicationDocumentsDirectory();无法使用 await getApplicationDocumentsDirectory() 创建本地文件;
【发布时间】:2020-04-28 01:15:29
【问题描述】:

当我运行以下函数时

_makeFile() async{
  final dataFile = 'data.txt';
  final directory = await getApplicationDocumentsDirectory();
    final file = File('${directory.path}/$dataFile');

    var isExist = await file.exists();
    if (isExist) {
      print('File exists');
    } else {
      print('file does not exist');
    }

}

我明白了:

颤动:文件不存在

颤振医生:

jfb @ezer in ~/FTest/file_exist [12:16:41]

$ 颤振医生 -v [✓] Flutter (Channel stable, v1.12.13+hotfix.5, on Mac OS X 10.15.2 19C57, locale en-FR) • Flutter 版本 1.12.13+hotfix.5 位于 /usr/local/flutter • 框架修订 27321ebbad(4 周前),2019-12-10 18:15:01 -0800 • 引擎版本 2994f7e1e6 • Dart 版本 2.7.0

[!] Android 工具链 - 为 Android 设备开发(Android SDK 版本 28.0.3) • Android SDK 位于 /Users/jfb/Library/Android/sdk • Android NDK 位置未配置(可选;对原生分析支持有用) • 平台 android-28,构建工具 28.0.3 • Java 二进制文件位于:/Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home/bin/java • Java 版本 Java(TM) SE Runtime Environment 18.3(内部版本 10.0.2+13) !不接受某些 Android 许可证。要解决此问题,请运行:flutter doctor --android-licenses

[✓] Xcode - 为 iOS 和 macOS 开发 (Xcode 11.3) • Xcode 位于 /Applications/Xcode.app/Contents/Developer • Xcode 11.3,内部版本 11C29 • CocoaPods 1.8.3 版

[!] Android Studio(未安装) • 未找到Android Studio;从https://developer.android.com/studio/index.html下载 (或访问https://flutter.dev/setup/#android-setup了解详细说明)。

[✓] 已连接设备(1 个可用) • iPhone 11 Pro Max • 1669648E-FBC3-41D7-9DA0-8E4FF5EBB360 • ios • com.apple.CoreSimulator.SimRuntime.iOS-13-3(模拟器)

!医生发现了 2 类问题。

我只是不明白发生了什么,我使用这种方法来存储 json 没有问题

感谢您的任何指点...

JF

【问题讨论】:

  • 你声明WRITE_EXTERNAL_STORAGE & READ_EXTERNAL_STORAGE 权限了吗?
  • 在上述评论之上,您是否检查过您使用getApplicationDocumentsDirectory() 获得的目录路径与您拥有data.txt 文件的目录路径相同?附带说明一下,您为什么不按照指示运行 flutter doctor --android-licenses 来修复丢失的许可证?

标签: flutter


【解决方案1】:

这一行:

final file = File('${directory.path}/$dataFile');

不创建File,只创建一个引用。

要创建File,您需要使用writeAsString()writeAsBytes()

通过添加重试:

final dataFile = 'data.txt';
final directory = await getApplicationDocumentsDirectory();
final file = File('${directory.path}/$dataFile');

await file.writeAsString('This is data.txt content'); // <-- This line

print(await file.exists() ? 'Exists' : 'Do not exists');

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2015-10-27
    • 2015-11-27
    • 2015-02-21
    • 2011-08-12
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2017-07-27
    相关资源
    最近更新 更多