如何在Dart中获取文件的名称?

时间:2013-07-09 14:37:41

标签: file dart

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

飞镖码:

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

如何获取文件名app.dart

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

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

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

7 个答案:

答案 0 :(得分:20)

您可以使用path package

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

main() {
  File file = new File("/dev/dart/work/hello/app.dart");
  String filename = basename(file.path);
}

答案 1 :(得分:4)

截至2020年4月的作品

  • 简洁明了,无需外部插件/软件包。
  • 复制粘贴所有代码并测试here
void main() {
  var completePath = "/dev/dart/work/hello/app.dart";
  var fileName = (completePath.split('/').last);
  var filePath = completePath.replaceAll("/$fileName", '');
  print(fileName);
  print(filePath);
}

答案 2 :(得分:3)

从文件路径创建一个新的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'
}

答案 3 :(得分:1)

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

String fileName = File(localFilePath).uri.pathSegments.last;

答案 4 :(得分:0)

由于Dart版本2.6已发布,并且可用于版本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);
}

阅读document以获得更多信息。

注意: 由于extension是一项新功能,因此它尚未完全集成到IDE中,因此可能无法自动识别。您必须在需要的地方手动导入extension。只要确保扩展文件已导入:

import 'package:<your_extention_path>/file_extentions.dart';

答案 5 :(得分:0)

如果你从资产中读取

println

结果

<service android:name=".RetroShareServiceAndroid" android:label="RetroShare Service" android:process=":rs> 

            <!-- Qt Application to launch -->
            <meta-data android:name="android.app.lib_name" android:value="retroshare-service"/>

            <!-- Ministro -->
            <meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
            <meta-data android:name="android.app.repository" android:value="default"/>
            <meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
            <meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
            <!-- Deploy Qt libs as part of package -->
            <meta-data android:name="android.app.bundle_local_qt_libs" android:value="1"/>
            <meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
            <meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
            <!-- Run with local libs -->
            <meta-data android:name="android.app.use_local_qt_libs" android:value="1"/>
            <meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
            <meta-data android:name="android.app.load_local_libs" android:value="plugins/platforms/android/libqtforandroid.so:plugins/bearer/libqandroidbearer.so"/>
            <meta-data android:name="android.app.load_local_jars" android:value="jar/QtAndroid.jar:jar/QtAndroidExtras.jar:jar/QtAndroidBearer.jar"/>
            <meta-data android:name="android.app.static_init_classes" android:value=""/>
            <!--  Messages maps -->
            <meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
            <meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
            <meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
            <!-- Messages maps -->

            <!-- Background running -->
            <meta-data android:name="android.app.background_running" android:value="true"/>
            <!-- Background running -->
        </service>

在 print 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

答案 6 :(得分:0)

@Alexandre Ardhuin 的回答。 path 库中的文档:

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