logo

You are viewing documentation generated from a user contribution or an upcoming or past release. The contents of this document may not have been reviewed by the Deno team. Click here to view the documentation for the latest release.

GitHub

Read and write files

Concepts

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

/**
 * read.ts
 */
const text = await Deno.readTextFile("./people.json");
console.log(text);

/**
 * Output:
 *
 * [
 *   {"id": 1, "name": "John", "age": 23},
 *   {"id": 2, "name": "Sandra", "age": 51},
 *   {"id": 5, "name": "Devika", "age": 11}
 * ]
 */

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

/**
 * write.ts
 */
await Deno.writeTextFile("./hello.txt", "Hello World!");
console.log("File written to ./hello.txt");

/**
 * Output: File written to ./hello.txt
 */

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

/**
 * write.ts
 */
function writeJson(path: string, data: object): string {
  try {
    Deno.writeTextFileSync(path, JSON.stringify(data));

    return "Written to " + path;
  } catch (e) {
    return e.message;
  }
}

console.log(writeJson("./data.json", { hello: "World" }));

/**
 * Output: Written to ./data.json
 */