Node.js fs.writeFileSync() Method

The fs.writeFileSync() method is a synchronous method. It creates a new file if the specified file does not exist. Also, the ‘readline-sync’ module is used to enable user input at runtime.

The ‘fs’ module of Node.js implements the File I/O operation. The fs module methods can be synchronous as well as asynchronous. The Asynchronous function has a callback function as the last parameter which indicates the completion of the asynchronous function. Node.js developers prefer asynchronous methods over synchronous methods as asynchronous methods never block a program during its execution, whereas the latter does. 

Blocking the main thread is malpractice in Node.js, thus synchronous functions should only be used for debugging or when no other options are available.  

 

Syntax:

fs.writeFileSync( file, data, options )

Parameters: This method accepts three parameters as mentioned above and described below:

  • file: It is a string, Buffer, URL, or file description integer that denotes the path of the file where it has to be written. Using a file descriptor will make it behave similarly to the fs.write() method.
  • data: It is a string, Buffer, TypedArray, or DataView that will be written to the file.
  • options: It is a string or object that can be used to specify optional parameters that will affect the output. It has three optional parameters:
    • encoding: It is a string that specifies the encoding of the file. The default value is ‘utf8’.
    • mode: It is an integer that specifies the file mode. The default value is 0o666.
    • flag: It is a string that specifies the flag used while writing to the file. The default value is ‘w’.

Below examples illustrate the fs.writeFileSync() method in Node.js.

Example 1:

javascript




// Node.js program to demonstrate the
// fs.writeFileSync() method
  
// Import the filesystem module
const fs = require('fs');
  
let data = "This is a file containing a collection"
           + " of programming languages.\n"
 + "1. C\n2. C++\n3. Python";
  
fs.writeFileSync("programming.txt", data);
console.log("File written successfully\n");
console.log("The written has the following contents:");
console.log(fs.readFileSync("programming.txt", "utf8"));


Output:

File written successfully

The written has the following contents:
This is a file containing a collection of programming languages.
1. C
2. C++
3. Python

Example 2: 

javascript




// Node.js program to demonstrate the
// fs.writeFileSync() method
  
// Import the filesystem module
const fs = require('fs');
  
// Writing to the file 5 times
// with the append file mode
for (let i = 0; i < 5; i++) {
  fs.writeFileSync("movies.txt",
    "Movie " + i + "\n",
    {
      encoding: "utf8",
      flag: "a+",
      mode: 0o666
    });
}
  
console.log("File written successfully 5 times\n");
console.log("The written file has the following contents:");
console.log(fs.readFileSync("movies.txt", "utf8"));


Output:

File written successfully 5 times

The written file has the following contents:
Movie 0
Movie 1
Movie 2
Movie 3
Movie 4

Example 3: Taking runtime input from users for file name and file data using readline module 

javascript




let readline = require('readline-sync');
let fs = require("fs");
  
let path = readline.question("Enter file name/path: ");
  
console.log("Entered path : " + path);
  
let data = readline.question("Enter file data: ");
  
//synchronous functions may throw errors 
//which can be handled using try-catch block
try {
    fs.writeFileSync(path, data, { flag: 'a+' }); //'a+' is append mode
    console.log("File written successfully");
} catch (err) {
    console.error(err);
}
console.log("-----------------------------------------------");
try {
    const data = fs.readFileSync(path, { encoding: "utf8" });
    console.log("File content is as follows:");
    // Display the file data 
    console.log(data);
} catch (err) {
    console.log(err);
}


Output 

Example 4: Taking runtime input from users for file data using readline module using buffer.

javascript




let fs = require("fs");
let readline = require('readline-sync');
let path = readline.question("Enter file name/path: ");
  
console.log("Entered path : " + path);
  
// 1024 specifies the buffer size. We can limit 
// the data size by this approach
let buf = new Buffer.alloc(1024);
buf = readline.question("Enter data:");
  
  
try {
    fs.writeFileSync(path, buf, { flag: 'a+' });
    console.log("File written successfully");
} catch (err) {
    console.error(err);
}
console.log("-----------------------------------------------");
try {
    const data = fs.readFileSync(path, { encoding: "utf8" });
    console.log("File content is as follows:");
    // Display the file data 
    console.log(data);
} catch (err) {
    console.log(err);
}


Output 

Reference: https://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options