添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

文件是存储在磁盘上的数据的集合,可以包含任何类型的数据,如文本、图片、音频等。文件是计算机中用于数据存储的基本单位,它可以包含各种类型的数据,如程序代码、文本文档、图片、音频和视频等。

Dart 中,我们可以使用 dart:io 库中的 File 类来操作文件。File类提供了一系列的方法,如 readAsString writeAsString readAsBytes writeAsBytes 等,用于读取和写入文件。这些方法都是异步的,因此在使用它们时,我们需要使用await关键词来等待操作完成。

以下是一个简单的示例,演示如何使用 File 类来创建一个新文件,并向其中写入一些文本:

在这个示例中,我们首先导入了 dart:io 库,然后创建了一个File对象,表示一个名为’test.txt’的文件。然后,我们使用 writeAsString 方法向文件中写入了一些文本。由于 writeAsString 方法是异步的,我们需要使用 await 关键词来等待操作完成。

import 'dart:io';
void main() async {
  var file = File('test.txt');
  await file.writeAsString('Hello, Dart!');
 

注意,由于我们在 main 函数中使用了 await 关键词,因此我们需要将 main 函数声明为异步函数,即在函数声明前添加 async 关键词。

void main() async { var file = File('test.txt'); String contents = await file.readAsString(); print(contents);

在这个示例中,如果我们没有权限写入 ‘/root/test.txt’ 文件,writeAsString 方法会抛出一个 FileSystemException 异常,然后我们在 catch 语句中捕获这个异常,并打印一个错误消息。

在实际使用中,可能还需要处理其他类型的错误和异常,例如磁盘空间不足等。处理这些错误和异常的方法和上述示例类似,关键是要正确地识别错误类型,然后进行相应的处理。

 Dart 中,我们可以使用dart:io库中的 Directory 类来操作目录。Directory 类提供了一系列的方法,如create、list、delete等,用于创建、列出和删除目录。这些方法都是异步的,因此在使用它们时,我们需要使用await关键词来等待操作完成。

以下是一个简单的示例,演示如何使用Directory类来创建一个新目录:

import 'dart:io';
void main() async {
  var directory = Directory('test');
  await directory.create();
 

在这个示例中,我们首先导入了dart:io库,然后创建了一个 Directory 对象,表示一个名为 ‘test’ 的目录。然后,我们使用 create 方法创建了这个目录。由于 create 方法是异步的,我们需要使用 await 关键词来等待操作完成。

注意,由于我们在 main 函数中使用了 await 关键词,因此我们需要将 main 函数声明为异步函数,即在函数声明前添加 async 关键词。

使用 create 方法可以创建一个新的目录。如果目录已经存在,create 方法不会有任何效果。如果你希望创建的目录的父目录不存在,可以给 create 方法传入一个名为 recursive 的参数,将其设为 true

import 'dart:io';
void main() async {
  var directory = Directory('test');
  await directory.create();
 

列出目录内容

使用list方法可以列出目录的内容,包括文件和子目录。list 方法返回一个 Stream 对象,我们可以使用 await for 语句来遍历这个 Stream

import 'dart:io';
void main() async {
  var directory = Directory('test');
  await for (var entity in directory.list()) {
    print(entity.path);
 

使用 delete 方法可以删除一个目录。如果目录不存在,delete 方法不会有任何效果。如果你希望删除的目录包含文件或子目录,可以给 delete 方法传入一个名为 recursive 的参数,将其设为true。

import 'dart:io';
void main() async {
  var directory = Directory('test');
  await directory.delete();
 

在实际使用中,你可能还需要处理各种可能出现的错误和异常,例如目录不存在、没有权限等。这些内容将在后续的章节中讲解。

void main() async { var directory = Directory('D:\SOFTWARES\postgresql'); await for (var entity in directory.list()) { print(entity.path);

这是一个错误的写法。因为在 Dart 中,字符串中的反斜杠 \ 是一个特殊字符,用于引入转义序列,因此你需要使用两个反斜杠 \\,那么就是:

var directory = Directory('D:\\SOFTWARES\\postgresql');
 

但是如果你觉得这样太麻烦了,不想再后动为你复制过来的 Windows 系统上的位置添加这么多的 \ 进行转移,那么就应该使用 原始字符串 (raw string)来避免处理转义字符。

原始字符串以 r 开头,如 r"Hello\nWorld"。在原始字符串中,\ 字符没有特殊含义,所以你可以直接使用 \ 而不是 \\。因此,下面的写法也是正确的:

var directory = Directory(r'D:\SOFTWARES\postgresql');
 

哦,似乎你知道 Python 等一些语言也是这样的。那就用起来吧。

硬链接 是指向文件的物理位置的引用。换句话说,硬链接和它所指向的文件在文件系统中是等价的,它们共享同一块存储空间。这意味着,如果你删除了硬链接,它所指向的文件仍然存在;如果你修改了硬链接的内容,它所指向的文件的内容也会被修改。

2. 软链接

软链接(也称为 符号链接  symlink)是指向另一个链接或文件的路径的引用。软链接和它所指向的文件在文件系统中是独立的,它们不共享存储空间。这意味着,如果你删除了软链接,它所指向的文件不会受到影响;如果你修改了软链接的内容,它所指向的文件的内容不会被修改。

在大多数情况下,我们都会使用软链接,因为它更加灵活和方便。然而,在某些情况下,硬链接可能会更有用。例如,如果你希望在不增加存储空间的情况下,从不同的位置访问同一个文件,你可以使用硬链接。

在下一节中,我们将讨论如何在 Dart 中操作链接。

路径是文件或目录在文件系统中的位置。它是一个字符串,由一系列的名称组成,这些名称代表从文件系统的根目录到文件或目录的路径。在路径中,名称之间通常由特殊的字符(如斜杠/或反斜杠\)分隔。

例如,路径 /home/user/documents/report.txt 表示在 home 目录下的 user 目录下的 documents 目录下的 report.txt 文件。

 Dart 中,我们可以使用字符串来表示路径。例如,我们可以创建一个表示文件路径的字符串,然后使用这个字符串来创建一个 File 对象:

import 'dart:io';
void main() {
  var path = '/home/user/documents/report.txt';
  var file = File(path);
 

在这个示例中,我们首先创建了一个表示文件路径的字符串,然后使用这个字符串来创建了一个File对象。

【注意】不同的操作系统可能使用不同的字符来分隔路径中的名称。
例如,Unix  Linux 系统使用斜杠/,而 Windows 系统使用反斜杠\
为了编写可移植的代码,我们应该尽可能避免直接在代码中使用这些特殊字符,而是使用 Dart 提供的路径操作函数,如join。这些函数可以正确地处理不同操作系统的路径分隔符。

void main() { var p = path.join('/home/user', 'documents', 'report.txt'); print(p); // Outputs: /home/user/documents/report.txt void main() { var name = path.basename('/home/user/documents/report.txt'); print(name); // Outputs: report.txt void main() { var parts = path.split('/home/user/documents/report.txt'); print(parts); // Outputs: ['/', 'home', 'user', 'documents', 'report.txt'] void main() { var dir = path.dirname('/home/user/documents/report.txt'); print(dir); // Outputs: /home/user/documents void main() { var ext = path.extension('/home/user/documents/report.txt'); print(ext); // Outputs: .txt void main() { var isAbs = path.isAbsolute('/home/user/documents/report.txt'); print(isAbs); // Outputs: true

华为开发者空间发布

让每位开发者拥有一台云主机

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
[email protected]