Introduction
Working with files is the bread and butter of every programming language when reaching out for data in the environment. The classes and methods dealing with this functionality can be found in the dart:io
package, together with support for networking (sockets and HTTP). This package can only be used in Dart command-line applications, not in browser apps, so our code runs in a Dart VM.
When working with files, and I/O in general, there are two modes of operation:
Synchronous operations, where code execution waits for the I/O result
Asynchronous operations, where the code execution is not blocked and continues while I/O is taking place
Because the Dart VM is single threaded, a synchronous call blocks the application. So, for scalability reasons, the asynchronous way is the best practice using the Future
and Stream
classes from the dart:async
package. Most methods on files come in pairs, the asynchronous and the synchronous versions, such as copy
and copySync
. Unless you really have...