41

我发现我无法以简单的方式获取文件的名称:(

飞镖代码:

File file = new File("/dev/dart/work/hello/app.dart");

如何获取文件名app.dart

我没有为此找到 API,所以我要做的是:

var path = file.path;
var filename = path.split("/").last;

有没有更简单的解决方案?

4

8 回答 8

83

您可以使用路径包

import 'dart:io';
import 'package:path/path.dart';

main() {
  File file = new File("/dev/dart/work/hello/app.dart");
  String filename = basename(file.path);
}
于 2013-07-09T14:46:02.910 回答
13

如果您不想使用路径 pub 包,可以使用 dart:io 中的 Uri 类,它返回文件名及其扩展名:

String fileName = File(localFilePath).uri.pathSegments.last;
于 2021-01-24T16:01:15.787 回答
6

截至 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);
}
于 2020-04-04T03:33:05.410 回答
5

由于 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;
  }
}

并将namegetter 添加到所有文件对象中。您可以简单地调用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';
于 2019-12-14T14:50:36.193 回答
4

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'
}
于 2013-07-09T14:47:08.317 回答
1
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
于 2021-09-30T08:26:17.450 回答
0

如果您从资产中读取

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
于 2021-07-01T09:48:39.207 回答
0

@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函数

于 2021-07-21T18:04:56.083 回答