Node.js — How to Touch a File

UNIX-based operating systems have a touch utility available on the command line. touch updates the access and modification times of a given file to the current time. A nice benefit: touch also creates the given file if it doesn’t exist.

This tutorial shows you how to implement a touch-like function using Node.js.

Node.js Series Overview

  1. String Replace All Appearances
  2. Remove All Whitespace From a String in JavaScript
  3. Generate a Random ID or String in Node.js or JavaScript
  4. Remove Extra Spaces From a String in JavaScript or Node.js
  5. Remove Numbers From a String in JavaScript or Node.js
  6. Get the Part Before a Character in a String in JavaScript or Node.js
  7. Get the Part After a Character in a String in JavaScript or Node.js
  8. How to Check if a Value is a String in JavaScript or Node.js
  9. Check If a String Includes All Strings in JavaScript/Node.js/TypeScript
  10. Check if a Value is a String in JavaScript and Node.js
  11. Limit and Truncate a String to a Given Length in JavaScript and Node.js
  12. Split a String into a List of Characters in JavaScript and Node.js
  13. How to Generage a UUID in Node.js
  14. Reverse a String in JavaScript or Node.js
  15. Split a String into a List of Lines in JavaScript or Node.js
  16. Split a String into a List of Words in JavaScript or Node.js
  17. Detect if a String is in camelCase Format in Javascript or Node.js
  18. Check If a String Is in Lowercase in JavaScript or Node.js
  19. Check If a String is in Uppercase in JavaScript or Node.js
  20. Get the Part After First Occurrence in a String in JavaScript or Node.js
  21. Get the Part Before First Occurrence in a String in JavaScript or Node.js
  22. Get the Part Before Last Occurrence in a String in JavaScript or Node.js
  23. Get the Part After Last Occurrence in a String in JavaScript or Node.js
  24. How to Count Words in a File
  25. How to Shuffle the Characters of a String in JavaScript or Node.js
  26. Append Characters or Words to a String in JavaScript or Node.js
  27. Check if a String is Empty in JavaScript or Node.js
  28. Ensure a String Ends with a Given Character in JavaScript or Node.js
  29. Left-Trim Characters Off a String in JavaScript or Node.js
  30. Right-Trim Characters Off a String in JavaScript or Node.js
  31. Lowercase the First Character of a String in JavaScript or Node.js
  32. Uppercase the First Character of a String in JavaScript or Node.js
  33. Prepend Characters or Words to a String in JavaScript or Node.js
  34. Check if a String is a Number
  35. Convert a String to Buffer
  36. Prevent Line Breaks in String Template Literals
  37. How to Implement a Custom `toString` Method (Coming soon)
  38. What Is `Symbol.toStringTag` and How to Use It (Coming soon)

Implement a Touch Method in Node.js

This tutorial uses the fs-extra package providing extra file system methods. One of the extra methods is ensureFile(path). This method ensures that a file exists at path or creates an empty file at path.

The second part for the touch method is the timestamp update. Node.js comes with a utimes method in the fs core module. The utimes methods updates a file’s last accessed or modified timestamps. The utimes method is also available through fs-extra.

You can combine the ensureFile method with utimes to create a method behaving like touch:

const Fs = require('fs-extra')

/**
 * Updates the access and modification times of the given `file` current
 * time. This method creates the `file` if it doesn’t exist.
 *
 * @param {String} file
 */
async touch (file: string) {  
  await Fs.ensureFile(file)

  const now = new Date()
  await Fs.utimes(file, now, now)
}

You can then go ahead and use the implemented touch method to update the timestamps for a specific file. Determine the lastAccessed and lastModified dates of the file using the related methods from Node.js’ fs module:

const { promises: Fs } = require('fs')

await touch('./file.txt')

await Fs.lastAccessed('./file.txt')  
// 2021-02-14T12:27:12.877Z
await Fs.lastModified('./file.txt')  
// 2021-02-14T12:27:12.877Z

await touch('./file.txt')

await Fs.lastAccessed('./file.txt')  
// 2021-02-14T12:27:26.191Z
await Fs.lastModified('./file.txt')  
// 2021-02-14T12:27:12.877Z

Use the @supercharge/filesystem Package

I’m the maintainer of the @supercharge/filesystem package providing convenient file system utilities.

One of the available methods is touch: combining the functionality of creating a file if it doesn’t exists and then updating the access and modification times to the current time:

const Fs = require('@supercharge/filesystem')

await Fs.touch('./file.txt')

await Fs.lastAccessed('./file.txt')  
// 2021-02-14T12:28:10.877Z
await Fs.lastModified('./file.txt')  
// 2021-02-14T12:28:10.877Z

await Fs.touch('./names.txt')

await Fs.lastAccessed('./file.txt')  
// 2021-02-14T12:28:39.191Z
await Fs.lastModified('./file.txt')  
// 2021-02-14T12:28:39.191Z

Enjoy!


Mentioned Resources

Explore the Library

Find interesting tutorials and solutions for your problems.