Creative Bracket

Learn Dart #5: Read and write files in under 30 seconds

In today’s quick tip, we will learn how easy it is to read and write files in Dart. We will use the File object of the ‘dart:io’ library to achieve this.

To follow along, generate the console-full project with stagehand:

mkdir my_app && cd my_app
stagehand console-full

See the solution in action below:

Here’s the full solution:

import 'dart:io';

main() async {
  var file = File('data.txt');
  var contents;

  if (await file.exists()) {
    // Read file
    contents = await file.readAsString();
    print(contents);

    // Write file
    var fileCopy = await File('data-copy.txt').writeAsString(contents);
    print(await fileCopy.exists());
    print(await fileCopy.length());
  }
}

Extending the example

1. How to better specify the file path

Install the path package by adding the dependency to your pubspec.yaml file:

dependencies:
  path: ^1.6.2

And running pub get in your terminal.

Import this at the top of bin/main.dart and amend the path as follows:

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

void main() async {
  var pathToFile = join(dirname(Platform.script.toFilePath()), '..', 'data.txt');
  var file = File(pathToFile);
  ..
  ..
}

2. How to read the file line by line

We can create a stream to read the file:

import 'dart:convert'; // Contains the `Utf8Decoder` and `LineSplitter` stream transformers
..
..
  if (await file.exists()) {
    // Read file
    contents = StringBuffer();
    var contentStream = file.openRead();

    contentStream
      .transform(Utf8Decoder())
      .transform(LineSplitter())
      .listen((String line) => contents.write(line), // Add line to our StringBuffer object
        onDone: () => print(contents.toString()), // Call toString() method to receive the complete data
        onError: (e) => print('[Problems]: $e'));
    ..
    ..
  }
..
..

A good use case for this would be processing a file containing environment variables, like the file contents below:

PORT=8080
API_KEY=lkjsk453lkslfkl5
API_USER=jermaineo

Please leave your feedback in the comments, and let me know what you would like to see demonstrated next!

Further reading:

  1. The File class
  2. Free Dart screencasts on Egghead.io

Sharing is caring 🤗

If you enjoyed reading this post, please share this through the various social buttons hovering on the left/top side of the screen ↖️⬆️. Also, check out and subscribe to my YouTube channel (hit the bell icon too) for videos on Dart.

Subscribe to the newsletter for my free 35-page Get started with Dart eBook and to be notified when new content is released.

Like, share and follow me 😍 for more content on Dart.

Jermaine Oppong

Hello 👋, I show programmers how to build full-stack web applications with the Dart SDK. I am passionate about teaching others, having received tremendous support on sites like dev.to and medium.com for my articles covering various aspects of the Dart language and ecosystem.

Useful learning materials