Read and write files
Concepts
- Deno’s runtime API provides the Deno.readTextFile and Deno.writeTextFile asynchronous functions for reading and writing entire text files.
- Like many of Deno’s APIs, synchronous alternatives are also available. See Deno.readTextFileSync and Deno.writeTextFileSync.
- Use
--allow-readand--allow-writepermissions to gain access to the file system.
Overview
Interacting with the filesystem to read and write files is a common requirement. Deno provides a number of ways to do this via the standard library and the Deno runtime API.
As highlighted in the Fetch Data example Deno restricts access
to Input / Output by default for security reasons. Therefore when interacting
with the filesystem the --allow-read and --allow-write flags must be used
with the deno run command.
Reading a text file
The Deno runtime API makes it possible to read text files via the
Deno.readTextFile() method, it just requires a path string or URL object. The
method returns a promise which provides access to the file’s text data.
Command: deno run --allow-read read.ts
1. /**
2. * read.ts
3. */
4. const text = await Deno.readTextFile("./people.json");
5. console.log(text);
7. /**
8. * Output:
9. *
10. * [
11. * {"id": 1, "name": "John", "age": 23},
12. * {"id": 2, "name": "Sandra", "age": 51},
13. * {"id": 5, "name": "Devika", "age": 11}
14. * ]
15. */
Writing a text file
The Deno runtime API allows developers to write text to files via the
Deno.writeTextFile() method. It just requires a file path and text string. The
method returns a promise which resolves when the file was successfully written.
To run the command the --allow-write flag must be supplied to the deno run
command.
Command: deno run --allow-write write.ts
1. /**
2. * write.ts
3. */
4. await Deno.writeTextFile("./hello.txt", "Hello World!");
5. console.log("File written to ./hello.txt");
7. /**
8. * Output: File written to ./hello.txt
9. */
By combining Deno.writeTextFile and JSON.stringify you can easily write
serialized JSON objects to a file. This example uses synchronous
Deno.writeTextFileSync, but this can also be done asynchronously using
await Deno.writeTextFile.
To execute the code the deno run command needs the write flag.
Command: deno run --allow-write write.ts
1. /**
2. * write.ts
3. */
4. function writeJson(path: string, data: object): string {
5. try {
6. Deno.writeTextFileSync(path, JSON.stringify(data));
8. return "Written to " + path;
9. } catch (e) {
10. return e.message;
11. }
12. }
14. console.log(writeJson("./data.json", { hello: "World" }));
16. /**
17. * Output: Written to ./data.json
18. */
