Dart的路径操作

简介: <div class="markdown_views"><h2 id="路径连接">路径连接</h2><pre class="prettyprint"><code class=" hljs lasso"><span class="hljs-keyword">import</span> <span class="hljs-string">'package:path/path

路径连接

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

main(List<String> arguments) {
  //将现有的两个路径连接
  var newPath = path.join('/Users/shailen', 'dart/projects');
  print(newPath);
}

输出有个问题,因为不同平台的路径分隔符是不同的,这个问题后面会解决

这里写图片描述

解析路径

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

main(List<String> arguments) {
  print(path.split('/Users/shailen'));
  print(path.split(r'C:\tempdir\tmp.txt'));
}

输出效果如下

这里写图片描述

计算相对路径

import 'dart:io' show Directory;
import 'package:path/path.dart' as path;

main(List<String> arguments) {
  //从当前目录到系统临时目录的路径
  print(path.relative(Directory.systemTemp.path));

  //使用相对路径
  var path1 = 'docs/book.html';
  var path2 = 'articles/list';
  print(path.relative(path1, from: path2));
  print(path.relative(path2, from: path1));

  //使用绝对路径
  var samples = 'http://www.dartlang.org/samples';
  var docs = 'http://www.dartlang.org/docs';
  print(path.relative(samples, from: docs));
  print(path.relative(docs, from: samples));
}

输出效果如下

这里写图片描述

URI和路径的转换

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

main(List<String> arguments) {
  var uri = path.toUri('http://dartlang.org/samples');
  print(path.fromUri(uri));
}

输出效果如下

这里写图片描述

路径文件的信息

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

main(List<String> arguments) {
  new File('${Directory.systemTemp.path}/dir/myFile.txt').create(recursive: true)
    .then((file) {
      //获取完整文件名
      print(path.basename(file.path));
      //获取文件目录
      print(path.dirname(file.path));
      //获取文件名
      print(path.basenameWithoutExtension(file.path));
      //获取文件扩展名
      print(path.extension(file.path));
    });
}

输出效果如下

这里写图片描述

平台的路径分隔符

import 'dart:io' show Platform;
import 'package:path/path.dart' as path;

main(List<String> arguments) {
  //下面两种方法都能得到当前平台的路径分隔符
  print(Platform.pathSeparator);
  print(path.separator);
}

这个方法就能解决第一个例子的问题,输出如下

这里写图片描述

目录
相关文章
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
3819 4
|
Android开发
flutter中实现仿Android端的onResume和onPause方法
flutter中实现仿Android端的onResume和onPause方法
Flutter-解决Try catch出现异常:type ‘_TypeError‘ is not a subtype of type ‘Exception‘ in type cast
Flutter-解决Try catch出现异常:type ‘_TypeError‘ is not a subtype of type ‘Exception‘ in type cast
483 1
|
9月前
|
人工智能 缓存 测试技术
Playwright进阶指南 (6) | 自动化测试实战
2025企业级测试解决方案全面解析:从单元测试到千级并发,构建高可用测试体系。结合Playwright智能工具,解决传统测试维护成本高、环境依赖强、执行效率低等痛点,提升测试成功率,内容从测试架构设计、电商系统实战框架、高级测试策略、Docker化部署、CI/CD集成及AI测试应用,助力测试工程师掌握前沿技术,打造高效稳定的测试流程。
Playwright进阶指南 (6) | 自动化测试实战
|
安全 网络安全 数据中心
服务器托管适用什么场景?
在数字化时代,服务器托管对企业运营至关重要。本文解析了五种常见托管方式:共享托管经济实惠,适合小型网站;VPS灵活可控,适合中小型企业;专用服务器性能卓越,适合大型应用;云托管灵活扩展,适应现代需求;托管式服务外包管理,省心省力。选择时需综合考虑预算、技术能力及性能要求,找到最佳解决方案。
575 0
|
Windows
开源批量卸载工具
【10月更文挑战第5天】
1023 2
|
iOS开发
如何找到Xcode中下载的Provisioning Profile文件
如何找到Xcode中下载的Provisioning Profile文件
2596 1
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
Web App开发 测试技术 持续交付
自动化测试的利器:Selenium与Python的完美结合
【9月更文挑战第21天】在软件开发的世界里,测试是确保产品质量的关键步骤。随着敏捷开发和持续集成的流行,自动化测试工具变得尤为重要。本文将介绍如何使用Selenium和Python进行高效的自动化测试,不仅提供代码示例,还深入探讨如何设计测试用例、选择正确的测试框架、以及如何整合到CI/CD流程中。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
348 3
|
前端开发 UED 开发者
【Flutter前端技术开发专栏】Flutter中的主题与样式主题化
【4月更文挑战第30天】Flutter是一款由谷歌开发的开源移动应用框架,因其高性能和跨平台能力受到开发者青睐。本文聚焦Flutter中的主题与样式主题化,阐述如何通过`ThemeData`定义和设置全局主题,以及如何利用`TextStyle`、`AppBarTheme`和`ButtonTheme`定制文本、AppBar和按钮样式。了解并运用这些知识,能提升应用的统一风格和用户体验,助力Flutter开发。
418 0
【Flutter前端技术开发专栏】Flutter中的主题与样式主题化