nodejs -- fs

Node.js 的 fs(File System)模块是一个内置模块,用于与文件系统进行交互,支持各种操作,如读取、写入、更新、删除文件以及创建和管理目录等。它提供了同步和异步的 API,允许开发者操作文件和目录。

1. 引入 fs 模块

在 Node.js 中,要使用 fs 模块,首先需要引入它:

const fs = require('fs');

2. fs 模块的操作方式

Node.js 的 fs 模块提供了两种操作方式:

1.同步 (Blocking): 阻塞式方法会等待文件操作完成后才会继续执行后续代码。
2.异步 (Non-blocking): 非阻塞式方法会立即返回,并通过回调函数提供操作结果。

3. 文件读取

异步读取文件:fs.readFile()
该方法用于读取文件内容。它是异步的,读取完成后会通过回调函数返回结果。

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) {
	console.error('Error reading file:', err);
	return;
  }
  console.log('File content:', data);
});

3.第一个参数是文件路径。
4.第二个参数是可选的编码(例如 'utf8'),如果未指定,返回的是 Buffer。
5.第三个参数是回调函数,接受两个参数:err(错误)和 data(文件内容)。

同步读取文件:fs.readFileSync()
与异步方法类似,但它是阻塞的,操作完成后会返回文件内容。

try {
  const data = fs.readFileSync('example.txt', 'utf8');
  console.log('File content:', data);
} catch (err) {
  console.error('Error reading file:', err);
}

4. 文件写入

异步写入文件:fs.writeFile()
此方法用于将数据写入到文件。如果文件存在,它会覆盖文件内容;如果文件不存在,则会创建一个新文件。

fs.writeFile('example.txt', 'Hello, Node.js!', 'utf8', (err) => {
  if (err) {
	console.error('Error writing to file:', err);
	return;
  }
  console.log('File has been written');
});

6.第一个参数是文件路径。
7.第二个参数是要写入的数据。
8.第三个参数是编码(例如 'utf8')。
9.第四个参数是回调函数,处理写入后的错误。

同步写入文件:fs.writeFileSync()
与异步方法类似,但它是阻塞的,操作完成后会返回结果。

try {
  fs.writeFileSync('example.txt', 'Hello, Node.js!', 'utf8');
  console.log('File has been written');
} catch (err) {
  console.error('Error writing to file:', err);
}

5. 追加数据到文件

异步追加:fs.appendFile()
该方法将数据附加到文件末尾。如果文件不存在,会自动创建文件。

fs.appendFile('example.txt', ' Appended text!', 'utf8', (err) => {
  if (err) {
	console.error('Error appending to file:', err);
	return;
  }
  console.log('Data has been appended');
});

同步追加:fs.appendFileSync()
与 appendFile 相同,但它是阻塞的。

try {
  fs.appendFileSync('example.txt', ' Appended text!', 'utf8');
  console.log('Data has been appended');
} catch (err) {
  console.error('Error appending to file:', err);
}
  1. 文件删除
    异步删除文件:fs.unlink()
    此方法用于删除文件。

    fs.unlink('example.txt', (err) => {
    if (err) {
    console.error('Error deleting file:', err);
    return;
    }
    console.log('File has been deleted');
    });

同步删除文件:fs.unlinkSync()
与异步方法类似,但它是阻塞的。

try {
  fs.unlinkSync('example.txt');
  console.log('File has been deleted');
} catch (err) {
  console.error('Error deleting file:', err);
}

7. 文件重命名

异步重命名:fs.rename()
此方法用于重命名或移动文件。

fs.rename('oldname.txt', 'newname.txt', (err) => {
  if (err) {
	console.error('Error renaming file:', err);
	return;
  }
  console.log('File has been renamed');
});

同步重命名:fs.renameSync()
与异步方法类似,但它是阻塞的。

try {
  fs.renameSync('oldname.txt', 'newname.txt');
  console.log('File has been renamed');
} catch (err) {
  console.error('Error renaming file:', err);
}

8. 检查文件是否存在

fs.existsSync()
此方法检查文件或目录是否存在,返回布尔值(true 或 false)。

if (fs.existsSync('example.txt')) {
  console.log('File exists');
} else {
  console.log('File does not exist');
}

异步检查文件存在:fs.access()
此方法检查文件或目录是否可访问,并通过回调函数报告结果。

fs.access('example.txt', fs.constants.F_OK, (err) => {
  if (err) {
	console.error('File does not exist');
  } else {
	console.log('File exists');
  }
});

9. 创建和删除目录

创建目录:fs.mkdir() / fs.mkdirSync()
创建新目录。

fs.mkdir('newDirectory', (err) => {
  if (err) {
	console.error('Error creating directory:', err);
	return;
  }
  console.log('Directory created');
});

删除目录:fs.rmdir() / fs.rmdirSync()
删除空目录。

fs.rmdir('newDirectory', (err) => {
  if (err) {
	console.error('Error removing directory:', err);
	return;
  }
  console.log('Directory removed');
});

10. 文件系统常量

Node.js 提供了一些常量用于文件操作中的权限和状态标识。例如:

10.fs.constants.F_OK:检查文件是否存在。
11.fs.constants.R_OK:检查文件是否可读取。
12.fs.constants.W_OK:检查文件是否可写入。
13.fs.constants.X_OK:检查文件是否可执行。

11. fs 模块的异步与同步版本

Node.js 中的 fs 模块提供了对应的同步和异步方法。异步方法通常会接受回调函数,处理完成后返回结果;同步方法则会阻塞代码执行直到操作完成。通常建议使用异步方法,以提高性能和避免阻塞事件循环。

12. fs.promises API

从 Node.js v10 起,fs.promises 提供了一套基于 Promise 的 API,适用于异步操作。示例如下:

const fsPromises = fs.promises;

async function readFile() {
  try {
	const data = await fsPromises.readFile('example.txt', 'utf8');
	console.log('File content:', data);
  } catch (err) {
	console.error('Error reading file:', err);
  }
}

通过 fs.promises,你可以使用 async/await 进行文件操作,更加简洁和易于管理异步代码。

posted @ 2025-04-07 14:44  蜗牛般庄  阅读(105)  评论(0)    收藏  举报
Title
页脚 HTML 代码