返回

亲手实践 Node.js 中最核心的文件操作方法

前端

在 Node.js 中,fs 模块是进行文件操作的核心模块,它提供了丰富的 API 来帮助开发者轻松实现文件操作。本文将从最常用的打开文件开始,深入探讨 fs 模块的用法,带领读者手把手实现各种文件操作,包括读取文件、写入文件、追加文件和删除文件。通过本文的学习,读者将掌握 fs 模块的精髓,并能够轻松应对各种文件操作任务。

打开文件

打开一个文件是进行文件操作的第一步,也是最基本的操作之一。在 fs 模块中,可以使用 fs.open() 方法来打开一个文件。fs.open() 方法的语法如下:

fs.open(path, flags, [mode], callback)

其中,path 是要打开的文件路径,flags 是文件系统标志,mode 是文件操作权限,callback 是回调函数。

flags 参数指定了要对文件进行什么操作,常见的有以下几种:

  • r:以只读方式打开文件。
  • w:以只写方式打开文件,如果文件不存在则创建文件,如果文件已存在则清空文件。
  • a:以追加方式打开文件,如果文件不存在则创建文件,如果文件已存在则在文件末尾追加数据。
  • r+:以读写方式打开文件。
  • w+:以读写方式打开文件,如果文件不存在则创建文件,如果文件已存在则清空文件。
  • a+:以读写方式打开文件,如果文件不存在则创建文件,如果文件已存在则在文件末尾追加数据。

mode 参数指定了文件操作权限,默认值为 0o666,即所有用户都可以读写文件。

callback 参数是回调函数,当文件打开成功后,回调函数会被调用。回调函数有两个参数,第一个参数是错误对象,第二个参数是文件符。如果文件打开成功,则错误对象为 null,文件符是一个整数,表示打开的文件。如果文件打开失败,则错误对象为一个 Error 对象,文件描述符为 -1。

下面是一个打开文件的示例:

const fs = require('fs');

fs.open('./file.txt', 'r', (err, fd) => {
  if (err) {
    console.error(err);
  } else {
    console.log(`文件打开成功,文件描述符为 ${fd}`);
  }
});

读取文件

打开文件后,就可以对文件进行读取操作。在 fs 模块中,可以使用 fs.readFile() 方法来读取文件。fs.readFile() 方法的语法如下:

fs.readFile(path, [options], callback)

其中,path 是要读取的文件路径,options 是读取文件的选项,callback 是回调函数。

options 参数可以指定读取文件的编码方式、读取文件的起始位置和读取文件的长度等。

callback 参数是回调函数,当文件读取成功后,回调函数会被调用。回调函数有两个参数,第一个参数是错误对象,第二个参数是读取到的数据。如果文件读取成功,则错误对象为 null,读取到的数据是一个 Buffer 对象。如果文件读取失败,则错误对象为一个 Error 对象,读取到的数据为 null。

下面是一个读取文件的示例:

const fs = require('fs');

fs.readFile('./file.txt', 'utf-8', (err, data) => {
  if (err) {
    console.error(err);
  } else {
    console.log(`文件读取成功,读取到的数据为 ${data}`);
  }
});

写入文件

打开文件后,也可以对文件进行写入操作。在 fs 模块中,可以使用 fs.writeFile() 方法来写入文件。fs.writeFile() 方法的语法如下:

fs.writeFile(path, data, [options], callback)

其中,path 是要写入的文件路径,data 是要写入的数据,options 是写入文件的选项,callback 是回调函数。

options 参数可以指定写入文件的编码方式、写入文件的起始位置和写入文件的长度等。

callback 参数是回调函数,当文件写入成功后,回调函数会被调用。回调函数有两个参数,第一个参数是错误对象,第二个参数是写入的文件路径。如果文件写入成功,则错误对象为 null,写入的文件路径为字符串。如果文件写入失败,则错误对象为一个 Error 对象,写入的文件路径为 null。

下面是一个写入文件的示例:

const fs = require('fs');

fs.writeFile('./file.txt', 'Hello World', 'utf-8', (err) => {
  if (err) {
    console.error(err);
  } else {
    console.log(`文件写入成功`);
  }
});

追加文件

打开文件后,还可以对文件进行追加操作。在 fs 模块中,可以使用 fs.appendFile() 方法来追加文件。fs.appendFile() 方法的语法如下:

fs.appendFile(path, data, [options], callback)

其中,path 是要追加的文件路径,data 是要追加的数据,options 是追加文件的选项,callback 是回调函数。

options 参数可以指定追加文件的编码方式、追加文件的起始位置和追加文件的长度等。

callback 参数是回调函数,当文件追加成功后,回调函数会被调用。回调函数有两个参数,第一个参数是错误对象,第二个参数是追加的文件路径。如果文件追加成功,则错误对象为 null,追加的文件路径为字符串。如果文件追加失败,则错误对象为一个 Error 对象,追加的文件路径为 null。

下面是一个追加文件的示例:

const fs = require('fs');

fs.appendFile('./file.txt', 'Hello World', 'utf-8', (err) => {
  if (err) {
    console.error(err);
  } else {
    console.log(`文件追加成功`);
  }
});

删除文件

打开文件后,还可以对文件进行删除操作。在 fs 模块中,可以使用 fs.unlink() 方法来删除文件。fs.unlink() 方法的语法如下:

fs.unlink(path, callback)

其中,path 是要删除的文件路径,callback 是回调函数。

callback 参数是回调函数,当文件删除成功后,回调函数会被调用。回调函数有两个参数,第一个参数是错误对象,第二个参数是删除的文件路径。如果文件删除成功,则错误对象为 null,删除的文件路径为字符串。如果文件删除失败,则错误对象为一个 Error 对象,删除的文件路径为 null。

下面是一个删除文件的示例:

const fs = require('fs');

fs.unlink('./file.txt', (err) => {
  if (err) {
    console.error(err);
  } else {
    console.log(`文件删除成功`);
  }
});

总结

本文从最常用的打开文件开始,深入探讨了 fs 模块的用法,带领读者手把手实现了各种文件操作,包括读取文件、写入文件、追加文件和删除文件。通过本文的学习,读者已经掌握了 fs 模块的精髓,并能够轻松应对各种文件操作任务。