【问题标题】:List local files in directory with Flutter使用 Flutter 列出目录中的本地文件
【发布时间】:2020-06-25 20:25:31
【问题描述】:

理解底层的 Flutter FileSystem 开始头疼了……

我试图简单地列出目录的内容(包含音频文件)并使用我找到的每个库来获得正确的路径但没有成功...... 这是我的结构:

root
  D assets
    D audio
      D categoryDir
        F something.wav
        F other.wav

这是我的 pubspec.yaml 的资产部分:

 assets:
  - assets/audio/
  - assets/audio/categoryDir/

我已经使用了getApplicationDocumentsDirectoryDirectory.list,但是使用这个我总是遇到文件未找到错误:

Directory directory = await getApplicationDocumentsDirectory();
Directory audioDir = new Directory(directory.path + '/assets/audio/categoryDir')
audioDir.list(recursive: true, followLinks: false)
  .listen((FileSystemEntity entity) {
    print('Files: ' + entity.path);
});

怎么办?

【问题讨论】:

    标签: file flutter directory filesystems


    【解决方案1】:

    你混淆了两种不同的东西:

    1. flutter 资产随应用程序提供,无法由应用程序更改(据我所知也没有浏览过)。
    2. getApplicationDocumentsDirectory() 返回应用的文档目录。您的应用可以在这里存储它在运行时获取的文件。

    如果您的资产中有许多 wav 文件,您可以按如下方式加载它们:

    // to get the asset as bytes
    String text = await rootBundle.loadString('/assets/text/randomText.txt');
    // to get the asset as string
    ByteData bytes = await rootBundle.load('/assets/music/randomAudio.wav');
    

    要获取所有资产的列表,我认为有必要创建一个包含所有路径的数组:

    List<String> audioAssets = [
        "assets/audio/categoryDir/something.wav"
        "assets/audio/categoryDir/other.wav"
    ];
    

    更新:实际上有一种方法可以显示所有包含资产的列表。

    final String manifestJson = await DefaultAssetBundle.of(context).loadString('AssetManifest.json');
    List<String> images = json.decode(manifestJson).keys.where((String key) {
        return key.startsWith('/assets/audio/categoryDir');
    }).toList();
    

    在这里找到答案:Flutter read all files from asset folder

    我希望这最终是你想要的。

    【讨论】:

    • 这正是我的问题,我知道我可以使用rootBundle.load 轻松加载每个路径,但是如果我不知道要读取的文件怎么办?并且只想列出某个目录中的所有文件
    • 您在编写应用程序时手动将文件添加到您的资产文件夹中。编译应用程序后,无法在此处进行任何更改。因此,您知道文件的名称。如果您让用户决定在编译应用程序时加载哪个文件,您可以向他显示名称列表,如我上一个代码 sn-p 中所示。但是你必须自己插入这个列表。这能回答你的问题吗?
    • 感谢您的回答,但不是真的..我的情况只是阅读,而不是写在文件上,所以即使它在运行时也应该没有问题。我需要知道目录中每个文件的名称(因为我在我的算法中使用它们),而我事先并不知道它们!
    • 我读了一点,实际上找到了你问题的答案。我编辑了我的答案。
    • 谢谢你,就是这样! ;)
    猜你喜欢
    • 2022-09-27
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2019-07-06
    • 2021-08-02
    • 1970-01-01
    相关资源
    最近更新 更多