首页 > 解决方案 > 使用 Flutter 列出目录中的本地文件

问题描述

我开始头疼了解底层的 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);
});

怎么做 ?

标签: fileflutterdirectoryfilesystems

解决方案


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

  1. 颤振资产随应用程序一起提供,不能由应用程序更改(据我所知也没有浏览过)。
  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 assets folder

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


推荐阅读