在 Node.js 中检查文件是否包含字符串
Check if a File contains a String in Node.js
在 Node.js 中检查文件是否包含字符串:
- 使用
fs.readFileSync()
方法读取文件。 - 使用
includes()
方法检查字符串是否包含在文件中。 - 如果字符串包含在文件中,该
includes
方法将返回。true
索引.js
// 👇️ if using ES6 Imports // import {readFileSync, promises as fsPromises} from 'fs'; const {readFileSync, promises: fsPromises} = require('fs'); // ✅ read file SYNCHRONOUSLY function checkIfContainsSync(filename, str) { const contents = readFileSync(filename, 'utf-8'); const result = contents.includes(str); return result; } // 👇️ true console.log(checkIfContainsSync('./example.txt', 'hello')); // -------------------------------------------------------------- // ✅ read file ASYNCHRONOUSLY 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
方法来检查文件的内容是否包含提供的字符串。
该includes
方法执行区分大小写的搜索,以确定是否在另一个字符串中找到提供的字符串。
如果您需要进行不区分大小写的搜索,请将文件内容和传入的字符串转换为小写。
索引.js
// 👇️ if using ES6 Imports // import {readFileSync, promises as fsPromises} from 'fs'; const {readFileSync, promises: fsPromises} = require('fs'); // ✅ read file SYNCHRONOUSLY function checkIfContainsSync(filename, str) { const contents = readFileSync(filename, 'utf-8'); // 👇️ convert both to lowercase for case insensitive check const result = contents.toLowerCase().includes(str.toLowerCase()); return result; } // 👇️ true console.log(checkIfContainsSync('./example.txt', 'HELLO'));
上面的代码片段假定
example.txt
在同一目录中有一个文件。确保也在同一目录中打开您的终端。例子.txt
hello world one two three
示例中的目录结构假设index.js
文件和
example.txt
文件位于同一个文件夹中,我们的终端也在该文件夹中。
或者,您可以使用该fsPromises
对象异步读取文件。
在 Node.js 中检查文件是否包含字符串:
- 使用
fsPromises.readFile()
方法读取文件。 - 使用
includes()
方法检查字符串是否包含在文件中。 - 如果字符串包含在文件中,该
includes
方法将返回。true
索引.js
// 👇️ if using ES6 Imports // import {readFileSync, promises as fsPromises} from 'fs'; const {readFileSync, promises: fsPromises} = require('fs'); // ✅ read file ASYNCHRONOUSLY 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
参数提供值,则该方法返回一个缓冲区,否则返回一个string
。该方法返回一个满足文件内容的承诺,因此我们必须await
使用它或使用其.then()
上的方法来获取已解析的字符串。
请注意,该checkIfContainsAsync
函数返回一个使用布尔值解析的 Promise。
它不像第一个代码片段中的同步方法那样直接返回布尔值。