當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Dart File用法及代碼示例


dart:io 庫中File 類的用法介紹如下。

對文件係統上文件的引用。

File 包含可以對其執行操作的path。您可以使用從 FileSystemEntity 繼承的屬性 parent 獲取文件的父目錄。

使用路徑名創建一個新的File 對象,以從您的程序訪問文件係統上的指定文件。

var myFile = File('file.txt');

File 類包含用於操作文件及其內容的方法。使用此類中的方法,您可以打開和關閉文件、讀取和寫入文件、創建和刪除文件以及檢查文件是否存在。

讀取或寫入文件時,您可以使用流(使用 openRead )、隨機訪問操作(使用 open )或方便的方法,例如 readAsString

此類中的大多數方法都以同步和異步對的形式出現,例如 readAsStringreadAsStringSync 。除非您有特定原因使用方法的同步版本,否則請首選異步版本以避免阻塞您的程序。

如果 path 是符號鏈接,而不是文件,則 File 的方法對鏈接的最終目標進行操作,但在鏈接上操作的 deletedeleteSync 除外。

從文件中讀取

以下代碼示例使用異步 readAsString 方法將文件中的全部內容作為字符串讀取:

import 'dart:async';
import 'dart:io';

void main() {
  File('file.txt').readAsString().then((String contents) {
    print(contents);
  });
}

讀取文件的更靈活和有用的方法是使用 Stream 。使用 openRead 打開文件,這將返回一個流,該流以字節塊的形式提供文件中的數據。讀取流以處理可用的文件內容。您可以連續使用各種轉換器將文件內容處理為所需的格式,或準備輸出。

您可能希望使用流來讀取大文件、使用轉換器操作數據或與其他 API 兼容,例如 WebSocket s。

import 'dart:io';
import 'dart:convert';
import 'dart:async';

void main() async {
  final file = File('file.txt');
  Stream<String> lines = file.openRead()
    .transform(utf8.decoder)       // Decode bytes to UTF-8.
    .transform(LineSplitter());    // Convert stream to individual lines.
  try {
    await for (var line in lines) {
      print('$line: ${line.length} characters');
    }
    print('File is now closed.');
  } catch (e) {
    print('Error: $e');
  }
}

寫入文件

要將字符串寫入文件,請使用 writeAsString 方法:

import 'dart:io';

void main() async {
  final filename = 'file.txt';
  var file = await File(filename).writeAsString('some content');
  // Do something with the file.
}

您還可以使用 Stream 寫入文件。使用 openWrite 打開文件,它會返回一個 IOSink,您可以將數據寫入該文件。請務必使用IOSink.close 方法關閉水槽。

import 'dart:io';

void main() {
  var file = File('file.txt');
  var sink = file.openWrite();
  sink.write('FILE ACCESSED ${DateTime.now()}\n');

  // Close the IOSink to free system resources.
  sink.close();
}

異步方法的使用

為避免程序意外阻塞,有幾個方法是異步的並返回 Future 。例如,獲取文件長度的 length 方法返回 Future 。等待未來準備好後得到結果。

import 'dart:io';

void main() async {
  final file = File('file.txt');

  var length = await file.length();
  print(length);
}

除了長度之外,existslastModifiedstat 和其他方法都是異步的。

其他資源

實現的類型

FileSystemEntity

相關用法


注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 File class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。