Node.js 如何监视文件的修改
在这篇文章中,我们将探讨如何在Node.js中监视文件的修改。有时候,我们可能需要查看特定文件所做的任何更改,并根据该文件执行某种类型的函数。为了监视对文件系统所做的任何更改,我们可以使用Node.js提供的fs模块来解决这个问题。为了监视文件的任何修改,我们可以使用fs.watch()或fs.watchFile()函数。
两者之间的区别是fs.watch()方法可以监视文件和目录,而fs.watchFile()只能用于监视文件的任何更改。
fs.watch() 是fs模块提供的内置应用程序编程接口方法。它定期监视给定目录中文件的任何更改。这个方法返回一个Watcher对象,用于跟踪文件的任何更改。
语法:
fs.watch()
fs.watch( filename[, options][, listener] )
fs.watchFile() 方法可以持续监视给定文件的任何更改。它包含一个回调监听器,始终监听文件并通知任何更改。
fs.watchFile()
fs.watchFile(filename[, options], listener)
参数: 上述方法接受3个参数,下面进行解释:
- filename: 这是一个字符串、缓冲区或URL,表示要监视的文件(fs.watch()中的目录)的名称。
- options: 这是一个字符串或对象,用于修改方法的行为。这是一个可选参数,进一步具有以下参数:
1. persistent: 这是一个布尔值,指定文件被监视时进程是否应该继续执行。默认值为true。
2. recursive: 这是一个布尔值,指定是否应该监视给定目录的子目录。默认值为false。
3. encoding: 这是一个字符串值,指定用于将文件名传递给用户的字符编码。 - listener: 这是一个字符串值,用于指定使用传递给监听器的文件名的字符编码。
1. eventType: 这是一个字符串值,指定文件上的不同修改类型。
2. filename: 正如名称所示,这接受一个字符串或缓冲区输入作为文件名。
以下示例说明在Node.js中对文件进行任何更改或修改时触发的事件:
示例1: 此示例使用 fs.watch() 方法显示文件的任何更改:
// Node.js program to demonstrate the
// fs.watch() method
// Importing the filesystem module
const fs = require('fs');
fs.watch("example.txt", (eventType, filename) => {
console.log("The file ", filename, " was modified!");
// We can look for different types of changes on a file
// using the event type like: rename, change, etc.
console.log("It was a ", eventType, " event type.");
});
// Changing the contents of the file
setTimeout(
() => fs.writeFileSync("example.txt",
"Welcome to Geeks for Geeks, The file is modified"), 1000);
输出:
The file example.txt was modified!
It was a change event type.
注意: 上述方法不可靠,可能会显示每次修改的多个事件。
示例 2: 该示例显示了使用 fs.watchFile() 方法对文件进行的任何更改:
// Node.js program to demonstrate
// the fs.watchFile() method
// Importing the filesystem module
const fs = require('fs');
fs.watchFile("example.txt", {
// Passing the options parameter
bigint: false,
persistent: true,
interval: 1000,
}, (curr, prev) => {
console.log("\nThe file was edited");
// Time when file was updated
console.log("File was modified at: ", prev.mtime);
console.log("File was again modified at: ", curr.mtime);
console.log(
"File Content Updated: ",
fs.readFileSync("example.txt", "utf8")
);
});
// Make Changes to the file for the first time
fs.writeFileSync("example.txt",
"Welcome to Geeks for Geeks");
// Make Changes to the file for the second time
setTimeout(
() => fs.writeFileSync("example.txt",
"File is Edited Again!!!"),
3000
);
输出: