我发现我无法以简单的方式获取文件的名称:(
飞镖代码:
File file = new File("/dev/dart/work/hello/app.dart");
如何获取文件名app.dart
?
我没有为此找到 API,所以我要做的是:
var path = file.path;
var filename = path.split("/").last;
有没有更简单的解决方案?
您可以使用路径包:
import 'dart:io';
import 'package:path/path.dart';
main() {
File file = new File("/dev/dart/work/hello/app.dart");
String filename = basename(file.path);
}
如果您不想使用路径 pub 包,可以使用 dart:io 中的 Uri 类,它返回文件名及其扩展名:
String fileName = File(localFilePath).uri.pathSegments.last;
截至 2020 年 4 月的作品
void main() {
var completePath = "/dev/dart/work/hello/app.dart";
var fileName = (completePath.split('/').last);
var filePath = completePath.replaceAll("/$fileName", '');
print(fileName);
print(filePath);
}
由于 Dart 版本2.6
已经公布,并且可以用于 Flutter 版本1.12
及更高版本,您可以使用extension
方法。它将为这个问题提供一个更具可读性和全局性的解决方案。
file_extensions.dart
:
import 'dart:io';
extension FileExtention on FileSystemEntity{
String get name {
return this?.path?.split("/")?.last;
}
}
并将name
getter 添加到所有文件对象中。您可以简单地调用name
任何文件。
main() {
File file = new File("/dev/dart/work/hello/app.dart");
print(file.name);
}
阅读文档以获取更多信息。
注意:
由于extension
是一项新功能,它尚未完全集成到 IDE 中,可能无法自动识别。您必须在extension
需要的任何地方手动导入。只需确保已导入扩展文件:
import 'package:<your_extention_path>/file_extentions.dart';
Path
从文件的路径创建一个新对象,并使用它的filename
属性来获取文件的名称:
import 'dart:io';
void main() {
var file = new File('/dev/dart/work/hello/app.dart');
Path path = new Path(file.path);
print(path.filename); // 'app.dart'
print(path.directoryPath); // '/dev/dart/work/hello'
}
String url= https://s3tytf.eu-central-1.wasabisys.com/case-ordersd/2/11/1/215/ODHC01jghf0113592015/oVz058q2ZLjkjghvDVEITM0Vw1G8wexkjI1ENkmZOehgsYNMy1idFYG6otpZoDJKjZU2s.pdf?AWSAccessKeyId=0VNN4TZAGM41ULSF&Signature=Wev4LVOoqjLd1W8I1XBdOnE%3D&Expires=1632993368876
现在让我们说,如果我只想从带有查询字符串oVz058q2ZLjDVEITM0Vw1G8wexkjI1ENkmZOehgsYNMy1idFYG6otpZoDJKjZU2s.pdf的 URL 中获取 pdf 的名称,
String pdfName = Uri.parse(url).path.split("/").last
如果您从资产中读取
import 'dart:convert';
import 'dart:io';
void main() async {
assetsGenerator();
}
void assetsGenerator({String assetsDir='/assets/images/'}) async {
var assetsPaths = Directory(Directory.current.path + assetsDir);
try {
var assetsList = assetsPaths.list();
await assetsList.forEach((element) {
String imageName = element.path.split('/').last;
String imagePath = assetsDir.split('/')[1] +
'/' +
assetsDir.split('/')[2] +
'/' +
imageName;
print(imagePath);
});
} catch (error) {
print(error.toString());
}
}
结果
assets/images/pexels-photo-2102416.jpeg
assets/images/pexels-photo.jpeg
assets/images/pexels-photo-7988087.jpeg
assets/images/pexels-photo-5052877.jpeg
assets/images/pexels-photo-326501.jpeg
assets/images/imac-apple-mockup-app-38544.jpeg
在打印imageName
变量中获取图像名称
imac-apple-mockup-app-38544.jpeg
@Alexandre Ardhuin 答案的补充。来自路径库的文档:
/// Gets the part of [path] after the last separator.
///
/// p.basename('path/to/foo.dart'); // -> 'foo.dart'
/// p.basename('path/to'); // -> 'to'
///
/// Trailing separators are ignored.
///
/// p.basename('path/to/'); // -> 'to'
String basename(String path) => context.basename(path);
/// Gets the part of [path] after the last separator, and without any trailing
/// file extension.
///
/// p.basenameWithoutExtension('path/to/foo.dart'); // -> 'foo'
///
/// Trailing separators are ignored.
///
/// p.basenameWithoutExtension('path/to/foo.dart/'); // -> 'foo'
String basenameWithoutExtension(String path) =>
context.basenameWithoutExtension(path);
所以,让我们试试basenameWithoutExtension
函数