深入理解Node.js中的文件操作

75 阅读2分钟

深入理解Node.js中的文件操作

Node.js 是一个强大的 JavaScript 运行时,特别适用于服务器端开发。文件操作是任何服务器端开发者的必备技能。Node.js 提供了强大的文件系统模块 fs,用以简单和高效地进行文件操作。在这篇文章中,我们将深入探讨一些常见的文件操作,如读取、写入、删除文件,以及目录操作。

文件系统模块 (fs)

Node.js 提供的 fs 模块,使得文件操作变得相对简单。它提供了同步(blocking)和异步(non-blocking)两种模式。同步模式会阻塞事件循环,直到文件操作完成;而异步模式不会阻塞事件循环。

const fs = require('fs');

读取文件

读取文件是最基本的操作之一。fs 提供了 fs.readFile 和 fs.readFileSync 方法来读取文件内容。

异步读取文件

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(data);
});

同步读取文件

try {
  const data = fs.readFileSync('example.txt', 'utf8');
  console.log(data);
} catch (err) {
  console.error(err);
}

写入文件

写入文件同样是非常重要的操作。fs 提供了 fs.writeFile 和 fs.writeFileSync 方法来进行文件写入。

异步写入文件

const content = 'Some content!';

fs.writeFile('example.txt', content, err => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('File has been saved!');
});

同步写入文件

const content = 'Some content!';

try {
  fs.writeFileSync('example.txt', content);
  console.log('File has been saved!');
} catch (err) {
  console.error(err);
}

追加文件

有时候,我们不想覆盖文件内容,而是追加一些新的数据。这时候就要用到 fs.appendFile 和 fs.appendFileSync

异步追加文件

const additionalContent = '\nAdditional content!';

fs.appendFile('example.txt', additionalContent, err => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Content has been appended!');
});

同步追加文件

const additionalContent = '\nAdditional content!';

try {
  fs.appendFileSync('example.txt', additionalContent);
  console.log('Content has been appended!');
} catch (err) {
  console.error(err);
}

删除文件

删除文件可以使用 fs.unlink 和 fs.unlinkSync

异步删除文件

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

同步删除文件

try {
  fs.unlinkSync('example.txt');
  console.log('File has been deleted!');
} catch (err) {
  console.error(err);
}

创建目录

创建目录可以使用 fs.mkdir 和 fs.mkdirSync

异步创建目录

const dir = './newDir';

fs.mkdir(dir, { recursive: true }, err => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Directory has been created!');
});

同步创建目录

const dir = './newDir';

try {
  fs.mkdirSync(dir, { recursive: true });
  console.log('Directory has been created!');
} catch (err) {
  console.error(err);
}

读取目录内容

读取目录内容可以使用 fs.readdir 和 fs.readdirSync

异步读取目录内容

const dir = './';

fs.readdir(dir, (err, files) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(files);
});

同步读取目录内容

const dir = './';

try {
  const files = fs.readdirSync(dir);
  console.log(files);
} catch (err) {
  console.error(err);
}

总结

Node.js 提供的 fs 模块使得文件操作变得非常高效和直观。通过异步操作可以避免阻塞事件循环流程,从而提升性能,同时同步操作则适用于一些简单的脚本或调试任务。在实际开发中,可以根据需求选择适当的文件操作方法。希望这篇文章对您更好地理解和使用 Node.js 中文件操作有所帮助。