Node.js fs.watch() 方法
fs.watch() 方法是 fs 模块的内置应用程序编程接口,用于持续监视给定文件或目录中的更改。它返回一个 fs.FSWatcher 对象,该对象可用于跟踪文件中的更改。
它有一个可选的侦听器作为第三个参数,可用于获取发生的更改。这个监听器有两个参数,一个是被修改的文件或目录的名称,另一个是修改的类型。在查看文件时,如果它消失并重新出现,则会发出“rename”事件,如果文件内容被修改,则会发出“change”事件。
注意:此方法不可靠,每次修改都可能在监听器中显示多个事件。
句法:
fs.watch( filename[, options][, listener] )
参数:此方法接受三个参数,如上所述,如下所述:
- 文件名:它是一个字符串、缓冲区或 URL,表示要监视的文件或目录的名称。
- options:它是一个字符串或对象,可用于修改方法的行为。它是一个可选参数。它具有以下参数:
- 持久性:它是一个布尔值,用于指定只要正在监视文件,进程是否应该继续。默认值是true。
- recursive:它是一个布尔值,用于指定是否应监视给定目录的所有子目录。默认值为假。
- encoding:它是一个字符串,它指定已用于传递给侦听器的文件名的字符编码。
- listener:它是一个在文件被访问或修改时调用的函数。它是一个可选参数。
- eventType:它是一个字符串,指定文件经历的修改类型。
- 文件名:它是一个字符串或缓冲区,指定触发事件的文件名。
返回值:函数调用成功时返回一个fs.StatWatcher对象。
下面的示例说明了 Node.js 中的fs.watch() 方法:
示例 1:此示例显示文件上 watch() 方法的用法。
javascript
// Node.js program to demonstrate the
// fs.watch() method
// Import the filesystem module
const fs = require('fs');
fs.watch("example_file.txt", (eventType, filename) => {
console.log("\nThe file", filename, "was modified!");
console.log("The type of change was:", eventType);
});
// Renaming the file to a new name
setTimeout(
() => fs.renameSync("example_file.txt", "new_file.txt"),
1000
);
// Renaming the file back to its old name
setTimeout(
() => fs.renameSync("new_file.txt", "example_file.txt"),
2000
);
// Changing the contents of the file
setTimeout(
() => fs.writeFileSync("example_file.txt",
"The file is modified"), 3000
);
javascript
// Node.js program to demonstrate the
// fs.watch() method
// Import the filesystem module
const fs = require('fs');
fs.watch("ex_dir", (eventType, filename) => {
console.log("\nThe file", filename, "was modified!");
console.log("The type of change was:", eventType);
});
// Changing the contents of a file
setTimeout(
() => fs.writeFileSync("ex_dir/ex1.txt",
"The file is modified"), 1000
);
// Renaming a file to a new name
setTimeout(
() => fs.renameSync("ex_dir/ex2.txt",
"ex_dir/new_ex2.txt"), 2000
);
输出:请注意,此方法不可靠,每次修改可能会显示多个事件。
The file example_file.txt was modified!
The type of change was: rename
The file example_file.txt was modified!
The type of change was: rename
The file example_file.txt was modified!
The type of change was: change
示例 2:此示例显示了 watch() 方法在目录上的用法。
javascript
// Node.js program to demonstrate the
// fs.watch() method
// Import the filesystem module
const fs = require('fs');
fs.watch("ex_dir", (eventType, filename) => {
console.log("\nThe file", filename, "was modified!");
console.log("The type of change was:", eventType);
});
// Changing the contents of a file
setTimeout(
() => fs.writeFileSync("ex_dir/ex1.txt",
"The file is modified"), 1000
);
// Renaming a file to a new name
setTimeout(
() => fs.renameSync("ex_dir/ex2.txt",
"ex_dir/new_ex2.txt"), 2000
);
输出:请注意,此方法不可靠,每次修改可能会显示多个事件。
The file ex1.txt was modified!
The type of change was: change
The file ex2.txt was modified!
The type of change was: rename
The file new_ex2.txt was modified!
The type of change was: rename
参考: https ://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener