深圳视频网站开发网页设计素材 旅游
- 作者: 五速梦信息网
- 时间: 2026年04月20日 09:19
当前位置: 首页 > news >正文
深圳视频网站开发,网页设计素材 旅游,应用公园怎么样,做网站时怎么裁切存图Flutter笔记 目录与文件存储以及在Flutter中的使用#xff08;上#xff09; 文件系统基础知识与路径操作 作者#xff1a;李俊才 #xff08;jcLee95#xff09;#xff1a;https://blog.csdn.net/qq_28550263 邮箱 #xff1a;291148484163.com 本文地址#xff1a;h… Flutter笔记 目录与文件存储以及在Flutter中的使用上 文件系统基础知识与路径操作 作者李俊才 jcLee95https://blog.csdn.net/qq_28550263 邮箱 291148484163.com 本文地址https://blog.csdn.net/qq_28550263/article/details/134499297 【简介】本文探讨了Dart和Flutter中的文件系统操作和文件存储。内容覆盖了Dart的文件系统基础文件路径处理文件读写操作及其优化上以及在Flutter中的文件读写相关注意的事项下。 下一节《 目录与文件存储以及在Flutter中的使用下 》 目 录 1. 概述2. Dart文件系统基础2.1 文件File2.1.1 文件的概念2.1.2 文件的操作2.1.3 错误处理和异常捕获 2.2 目录Directory2.2.1 目录的概念2.2.2 目录的操作创建目录列出目录内容删除目录 2.2.3 一个注意点关于目录的字符串表示 2.3 链接Link2.3.1 链接的概念2.3.2 硬链接 和 软链接1. 硬链接2. 软链接 2.3.3 链接的操作创建链接获取链接的目标更新链接的目标删除链接 3. Dart文件路径操作3.1 路径的概念3.3 路径的操作3.3.1 连接路径join3.3.2 获取路径的基名basename3.3.3 分割路径split3.3.4 获取路径的目录名dirname3.3.5 获取路径的扩展名extension3.3.6 判断路径是否为绝对路径isAbsolute 1. 概述 本文主要介绍了Dart和Flutter中的文件系统操作和文件存储。首先我们将探讨Dart中的文件系统基础包括文件、目录和链接的基本概念及其操作方法。然后我们将学习如何在Dart中处理文件路径以及如何进行文件的读写操作。接着我们将讨论如何在Flutter中进行文件存储包括如何使用path_provider库来获取应用的文件存储路径以及如何读写特殊类型的文件。最后我们将探讨文件读写的性能优化。希望通过本文你能够对Dart和Flutter中的文件操作有一个全面的了解。 2. Dart文件系统基础 本小节将介绍文件的基本概念、操作方法以及错误处理和异常捕获。 2.1 文件File 本小节包括3个子小节讲解文件的基本概念、操作方法以及错误处理和异常捕获。 2.1.1 文件的概念 文件是存储在磁盘上的数据的集合可以包含任何类型的数据如文本、图片、音频等。文件是计算机中用于数据存储的基本单位它可以包含各种类型的数据如程序代码、文本文档、图片、音频和视频等。 在 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 关键词。 2.1.2 文件的操作 在 Dart 中我们可以使用 File 类的各种方法来操作文件包括创建、读取、写入和删除等操作。 以下是一些常用的文件操作方法的示例 创建文件使用 create 方法可以创建一个新的文件。如果文件已经存在create 方法不会有任何效果。如果你希望覆盖已经存在的文件可以给 create 方法传入一个名为 recursive 的参数将其设为 true。 import dart:io;void main() async {var file File(test.txt);await file.create(); }读取文件使用 readAsString 方法可以读取文件的内容返回一个字符串。如果文件不存在readAsString 方法会抛出一个异常。 import dart:io;void main() async {var file File(test.txt);String contents await file.readAsString();print(contents); }写入文件使用 writeAsString 方法可以向文件中写入字符串。如果文件不存在writeAsString 方法会创建一个新的文件。如果文件已经存在writeAsString 方法会覆盖文件的内容。 import dart:io;void main() async {var file File(test.txt);await file.writeAsString(Hello, Dart!); }删除文件使用 delete 方法可以删除一个文件。如果文件不存在delete 方法不会有任何效果。 import dart:io;void main() async {var file File(test.txt);await file.delete(); }在实际使用中你可能还需要处理各种可能出现的错误和异常例如文件不存在、没有权限等。这些内容将在后续小节中讲解。 2.1.3 错误处理和异常捕获 在进行文件操作时可能会出现各种错误和异常例如文件不存在、没有读写权限等。在 Dart 中我们可以使用 try-catch 语句来捕获和处理这些错误和异常。 以下是一些常见的错误处理和异常捕获的示例 文件不存在当我们试图读取或删除一个不存在的文件时Dart会抛出一个 FileSystemException 异常。我们可以捕获这个异常然后进行相应的处理例如创建一个新的文件或者给用户显示一个错误消息。 import dart:io;void main() async {var file File(test.txt);try {String contents await file.readAsString();print(contents);} catch (e) {print(Error: \(e);} }在这个示例中如果 ‘test.txt’ 文件不存在readAsString方法会抛出一个 FileSystemException 异常然后我们在catch语句中捕获这个异常并打印一个错误消息。 没有读写权限当我们试图读取或写入一个我们没有权限访问的文件时Dart 也会抛出一个 FileSystemException 异常。我们可以捕获这个异常然后进行相应的处理例如请求用户提供权限或者给用户显示一个错误消息。 import dart:io;void main() async {var file File(/root/test.txt);try {await file.writeAsString(Hello, Dart!);} catch (e) {print(Error: \)e);} }在这个示例中如果我们没有权限写入 ‘/root/test.txt’ 文件writeAsString 方法会抛出一个 FileSystemException 异常然后我们在 catch 语句中捕获这个异常并打印一个错误消息。 在实际使用中可能还需要处理其他类型的错误和异常例如磁盘空间不足等。处理这些错误和异常的方法和上述示例类似关键是要正确地识别错误类型然后进行相应的处理。 2.2 目录Directory 本小节将介绍目录的基本概念及其在Dart中的操作方法。 2.2.1 目录的概念 目录是文件的容器可以包含文件和其他目录。在文件系统中目录用于组织文件使得我们可以更方便地管理和访问文件。一个目录可以包含任意数量的文件和子目录。 在 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 关键词。 2.2.2 目录的操作 在 Dart 中我们可以使用 Directory 类的各种方法来操作目录包括创建、列出内容和删除等操作。 以下是一些常用的目录操作方法的示例 创建目录 使用 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);} }注 await for 是一种特殊的循环结构用于处理异步流。 await for 循环会订阅 提供的流并等待流生成新的值。 每当流生成新的值循环体就会使用这个值进行一次迭代。当流关闭时循环就会结束。 删除目录 使用 delete 方法可以删除一个目录。如果目录不存在delete 方法不会有任何效果。如果你希望删除的目录包含文件或子目录可以给 delete 方法传入一个名为 recursive 的参数将其设为true。 import dart:io;void main() async {var directory Directory(test);await directory.delete(); }在实际使用中你可能还需要处理各种可能出现的错误和异常例如目录不存在、没有权限等。这些内容将在后续的章节中讲解。 2.2.3 一个注意点关于目录的字符串表示 如果你正在使用的是 Windows 系统并且上面的代提示一些路径方面的错误那么或许本小节可以帮助到你。 假设你有一个目录为 D:\SOFTWARES\postgresqlWindows系统上现在你想输出该目录中所有的文件如果直接使用这段字符串那就是 // 错误示例 import dart:io;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 开头如 rHello\nWorld。在原始字符串中\ 字符没有特殊含义所以你可以直接使用 \ 而不是 \。因此下面的写法也是正确的 var directory Directory(rD:\SOFTWARES\postgresql);哦似乎你知道 Python 等一些语言也是这样的。那就用起来吧。 2.3 链接Link 本小节将介绍链接的基本概念以及在Dart中如何操作链接。 2.3.1 链接的概念 链接是指向另一个文件或目录的引用。在文件系统中链接可以使我们在不复制文件内容的情况下从不同的位置访问同一个文件。这对于节省存储空间和提高数据管理的效率非常有用。链接可以分为两种类型硬链接 和 软链接也被称为 符号链接。 2.3.2 硬链接 和 软链接 在以前写的另外一篇文章中关于链接有更加详细的介绍包括如何直接通过命令创建链接 《链接、包管理工具、polyrepo、monorepo以及Lerna 工具的使用》地址为 https://jclee95.blog.csdn.net/article/details/129903902。感兴趣的读者可以参考。 硬链接和软链接是两种不同类型的链接它们的主要区别在于指向文件的方式不同。
- 硬链接 硬链接 是指向文件的物理位置的引用。换句话说硬链接和它所指向的文件在文件系统中是等价的它们共享同一块存储空间。这意味着如果你删除了硬链接它所指向的文件仍然存在如果你修改了硬链接的内容它所指向的文件的内容也会被修改。
- 软链接 软链接也称为 符号链接 或 symlink是指向另一个链接或文件的路径的引用。软链接和它所指向的文件在文件系统中是独立的它们不共享存储空间。这意味着如果你删除了软链接它所指向的文件不会受到影响如果你修改了软链接的内容它所指向的文件的内容不会被修改。 在大多数情况下我们都会使用软链接因为它更加灵活和方便。然而在某些情况下硬链接可能会更有用。例如如果你希望在不增加存储空间的情况下从不同的位置访问同一个文件你可以使用硬链接。 在下一节中我们将讨论如何在 Dart 中操作链接。 2.3.3 链接的操作 在 Dart 中我们可以使用Link类的各种方法来操作链接如 create 和 delete 等。 创建链接 使用 create 方法可以创建一个新的链接。如果链接已经存在create方法会覆盖已经存在的链接。 import dart:io;void main() async {var link Link(link);await link.create(test.txt); }在这个示例中我们创建了一个新的链接该链接指向名为 ‘test.txt’ 的文件。 获取链接的目标 使用 target 方法可以获取链接的目标。 import dart:io;void main() async {var link Link(link);String target await link.target();print(target); }在这个示例中我们获取了链接的目标并将其打印出来。 更新链接的目标 使用update方法可以更新链接的目标。 import dart:io;void main() async {var link Link(link);await link.update(new_target.txt); }在这个示例中我们更新了链接的目标将其指向名为 ‘new_target.txt’ 的文件。 删除链接 使用 delete 方法可以删除一个链接。如果链接不存在delete 方法不会有任何效果。 import dart:io;void main() async {var link Link(link);await link.delete(); }在这个示例中我们删除了链接。 3. Dart文件路径操作 3.1 路径的概念 路径是文件或目录在文件系统中的位置。它是一个字符串由一系列的名称组成这些名称代表从文件系统的根目录到文件或目录的路径。在路径中名称之间通常由特殊的字符如斜杠/或反斜杠\分隔。 例如路径 /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。这些函数可以正确地处理不同操作系统的路径分隔符。 3.3 路径的操作 在 Dart 中我们可以使用 path 库中的各种函数来操作路径。这个库提供了一系列的函数用于连接路径、获取路径的基名、分割路径等。 3.3.1 连接路径join join 函数可以连接两个或多个路径。它会自动处理路径中的分隔符使得你的代码可以在不同的操作系统上正确运行。 import package:path/path.dart as path;void main() {var p path.join(/home/user, documents, report.txt);print(p); // Outputs: /home/user/documents/report.txt }3.3.2 获取路径的基名basename basename 函数可以获取路径的基名即路径的最后一部分。 import package:path/path.dart as path;void main() {var name path.basename(/home/user/documents/report.txt);print(name); // Outputs: report.txt }3.3.3 分割路径split split函数可以分割路径将路径分解为它的各个部分。 import package:path/path.dart as path;void main() {var parts path.split(/home/user/documents/report.txt);print(parts); // Outputs: [/, home, user, documents, report.txt] }3.3.4 获取路径的目录名dirname dirname 函数可以获取路径的目录名即除去最后一部分的路径。 import package:path/path.dart as path;void main() {var dir path.dirname(/home/user/documents/report.txt);print(dir); // Outputs: /home/user/documents }3.3.5 获取路径的扩展名extension extension函数可以获取路径的扩展名即最后一部分中的点.之后的部分。 import package:path/path.dart as path;void main() {var ext path.extension(/home/user/documents/report.txt);print(ext); // Outputs: .txt }3.3.6 判断路径是否为绝对路径isAbsolute isAbsolute 函数可以判断路径是否为绝对路径。绝对路径是从文件系统的根目录开始的路径而相对路径是从当前目录开始的路径。 import package:path/path.dart as path;void main() {var isAbs path.isAbsolute(/home/user/documents/report.txt);print(isAbs); // Outputs: true }
- 上一篇: 深圳市做物流网站dede自定义网站地图
- 下一篇: 深圳手机网站成全高清视频免费观看
相关文章
-
深圳市做物流网站dede自定义网站地图
深圳市做物流网站dede自定义网站地图
- 技术栈
- 2026年04月20日
-
深圳市做网站做一个模板网站多少钱
深圳市做网站做一个模板网站多少钱
- 技术栈
- 2026年04月20日
-
深圳市做网站汕头企业网页设计
深圳市做网站汕头企业网页设计
- 技术栈
- 2026年04月20日
-
深圳手机网站成全高清视频免费观看
深圳手机网站成全高清视频免费观看
- 技术栈
- 2026年04月20日
-
深圳手机网站门户媒体有哪些
深圳手机网站门户媒体有哪些
- 技术栈
- 2026年04月20日
-
深圳苏州企业网站建设服务网站怎么弄缩略图上传
深圳苏州企业网站建设服务网站怎么弄缩略图上传
- 技术栈
- 2026年04月20日
