In this chapter, we will cover the following recipes:
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:
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 to wait for the result, use the asynchronous way so that screens and apps do not appear to be blocked and can still respond.
If you need a recap, visit the tutorials at https://www.dartlang.org/docs/tutorials/futures/ and https://www.dartlang.org/docs/tutorials/streams/. In this chapter, we will focus on recipes to handle files.