使用 Flutter 列出目录中的本地文件
List local files in directory with Flutter
我开始头疼了解底层的Flutter FileSystem...
我试图简单地列出一个目录的内容(有音频文件)并使用我找到的每个库来获得正确的路径但没有成功...
这是我的结构:
root
D assets
D audio
D categoryDir
F something.wav
F other.wav
这是我的资产部分 pubspec.yaml :
assets:
- assets/audio/
- assets/audio/categoryDir/
我已经使用了 getApplicationDocumentsDirectory
和 Directory.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);
});
怎么办?
你混淆了两种不同的东西:
- flutter assets 是应用程序自带的,不能被应用程序更改(据我所知也没有浏览过)。
- getApplicationDocumentsDirectory() returns 您应用程序的文档目录。您的应用可以在此处存储它在运行时获取的文件。
如果您的资产中有多个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 FileSystem...
我试图简单地列出一个目录的内容(有音频文件)并使用我找到的每个库来获得正确的路径但没有成功... 这是我的结构:
root
D assets
D audio
D categoryDir
F something.wav
F other.wav
这是我的资产部分 pubspec.yaml :
assets:
- assets/audio/
- assets/audio/categoryDir/
我已经使用了 getApplicationDocumentsDirectory
和 Directory.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);
});
怎么办?
你混淆了两种不同的东西:
- flutter assets 是应用程序自带的,不能被应用程序更改(据我所知也没有浏览过)。
- getApplicationDocumentsDirectory() returns 您应用程序的文档目录。您的应用可以在此处存储它在运行时获取的文件。
如果您的资产中有多个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();
在这里找到答案:
我希望这就是您要找的东西。