扫码一下
查看教程更方便
在 Node.js 中检查文件是否包含字符串:
// 如果使用 ES6 导入将以下注释打开
// import {readFileSync, promises as fsPromises} from 'fs';
const {readFileSync, promises: fsPromises} = require('fs');
// 同步读取文件
function checkIfContainsSync(filename, str) {
const contents = readFileSync(filename, 'utf-8');
const result = contents.includes(str);
return result;
}
// true
console.log(checkIfContainsSync('./example.txt', 'hello'));
// --------------------------------------------------------------
// 异步读取文件
async function checkIfContainsAsync(filename, str) {
try {
const contents = await fsPromises.readFile(filename, 'utf-8');
const result = contents.includes(str);
console.log(result);
return result;
} catch (err) {
console.log(err);
}
}
// Promise<true>
checkIfContainsAsync('./example.txt', 'hello');
第一个示例中的函数同步读取文件的内容。
fs.readFileSync
方法将文件的路径作为第一个参数,将编码作为第二个参数。
该方法返回所提供路径的内容。
如果省略 encoding 参数,该函数将返回一个缓冲区,否则返回一个字符串。
我们使用 String.includes
方法来检查文件的内容是否包含提供的字符串。
include
方法执行区分大小写的搜索,以检查提供的字符串是否在另一个字符串中找到。
如果我们需要进行不区分大小写的搜索,请将文件的内容和传入的字符串转换为小写。
// 如果使用 ES6 导入将以下注释打开
// import {readFileSync, promises as fsPromises} from 'fs';
const {readFileSync, promises: fsPromises} = require('fs');
// 同步读取文件
function checkIfContainsSync(filename, str) {
const contents = readFileSync(filename, 'utf-8');
// 将两者都转换为小写以进行不区分大小写的检查
const result = contents.toLowerCase().includes(str.toLowerCase());
return result;
}
// true
console.log(checkIfContainsSync('./example.txt', 'HELLO'));
上面的代码片段假设有一个 example.txt 文件位于同一目录中。 确保也在同一目录中打开我们的终端。
hello world
one
two
three
示例中的目录结构假设 index.js 文件和 example.txt 文件位于同一文件夹中,并且我们的终端也在该文件夹中。
或者,我们可以使用 fsPromises
对象异步读取文件。
在 Node.js 中检查文件是否包含字符串:
// 如果使用 ES6 导入将以下注释打开
// import {readFileSync, promises as fsPromises} from 'fs';
const {readFileSync, promises: fsPromises} = require('fs');
// 异步读取文件
async function checkIfContainsAsync(filename, str) {
try {
const contents = await fsPromises.readFile(filename, 'utf-8');
const result = contents.includes(str);
console.log(result);
return result;
} catch (err) {
console.log(err);
}
}
checkIfContainsAsync('./example.txt', 'hello');
fsPromises.readFile()
方法异步读取所提供文件的内容。
如果我们没有为 encoding 参数提供值,则该方法返回一个缓冲区,否则返回一个字符串。
该方法返回一个满足文件内容的promise,因此我们必须等待它或对其使用 .then()
方法来获取已解析的字符串。
请注意,checkIfContainsAsync
函数返回一个用布尔值解析的 Promise。
它不像第一个代码片段中的同步方法那样直接返回布尔值。