Rumah  >  Artikel  >  hujung hadapan web  >  Modul mana dalam nodejs menyediakan API operasi fail

Modul mana dalam nodejs menyediakan API operasi fail

青灯夜游
青灯夜游asal
2021-11-10 11:59:432663semak imbas

Dalam nodejs, modul sistem fail menyediakan API operasi fail. Modul sistem fail (dirujuk sebagai modul fs) membolehkan pengguna mengakses dan berinteraksi dengan sistem fail pada komputer menggunakan modul fs, penciptaan, penulisan, pemadaman dan operasi lain fail dan direktori boleh dicapai.

Modul mana dalam nodejs menyediakan API operasi fail

Persekitaran pengendalian tutorial ini: sistem Windows 7, nodejs versi 12.19.0, komputer DELL G3.

1: Bagaimana hendak membaca keseluruhan kandungan fail?

Nota: Membaca fail dan menulis fail mungkin membosankan untuk difahami, tetapi setiap kali saya mengkaji artikel sedemikian, saya bersedia untuk artikel seterusnya, kerana artikel saya seterusnya Demo artikel memerlukan menggunakan ilmu ini, maka saya akan merekodkan segala ilmu yang perlu difahami.

Dalam Node.js, gunakan modul fs untuk mencipta, menulis dan memadam semua fail dan direktori.

1 Kaedah membaca fail:

Apabila menjalankan operasi membaca fail, anda boleh menggunakan kaedah readFile dan kaedah readFileSync untuk membaca fail, terdapat Mereka dengan perkataan Sync dan perkataan lain adalah kaedah segerak, dan yang tanpa perkataan ini adalah kaedah tak segerak Perbezaan antara kaedah segerak dan kaedah tak segerak ialah: kaedah segerak mengembalikan hasil operasi dengan segera lihat API yang berkaitan dahulu:

1) API fail bacaan disegerakkan readFileSync

digunakan seperti berikut:

fs.readFileSync(filename, [options]);

parameter nama fail: digunakan untuk menentukan fail lengkap laluan dan nama fail fail yang dibaca.

parameter pilihan: Nilai ini ialah objek, yang boleh menentukan tindakan yang perlu diambil untuk fail menggunakan atribut bendera apabila membaca fail lalai ialah 'r' nilai yang boleh ditentukan seperti berikut:

  • 'r': Baca fail Jika fail tidak wujud, pengecualian akan dibuang.

  • 'r ': Baca dan tulis fail, buang pengecualian jika fail itu tidak wujud.

  • 'rs': Baca fail secara serentak dan maklumkan sistem pengendalian untuk mengabaikan cache sistem fail tempatan Jika fail tidak wujud, pengecualian akan dilemparkan.

  • 'w': Tulis pada fail, buat fail jika ia tidak wujud dan kosongkan kandungan fail jika fail itu sudah wujud.

  • 'w ': Baca dan tulis fail, fungsi lain adalah sama dengan 'w'.

  • 'a': tambahkan pada fail, atau buat fail jika ia tidak wujud.

  • 'a ': Baca dan tambahkan pada fail, buat fail jika ia tidak wujud.

Dalam parameter pilihan, kita boleh menggunakan atribut pengekodan untuk menentukan format pengekodan yang hendak digunakan untuk membaca fail Nilai atribut adalah 'utf-8', '. ascii', 'base64' , mari kita lihat demo mudah dahulu. Seperti yang ditunjukkan di bawah:

Mula-mula lihat struktur direktori seperti berikut:

### 目录结构如下:
demo1                                       # 工程名
|   |--- readFile                           # 读取文件的文件夹            
|   | |-- index.html                        # html文件
|   | |-- index.js                          # js文件
|   | |-- package.json          
|   | |-- node_modules

Kod berikut membaca kod fail:

const fs = require('fs');
try {
  const data = fs.readFileSync('./index.html', 'utf-8');
  // 等待操作结果返回,然后打印结果
  console.log(data);
} catch(e) {
  console.log('读取文件发生错误');
}

Laksanakan indeks nod pada baris perintah. dan pilihan dan parameter kaedah segerak Ia adalah sama.

Parameter panggil balik ialah fungsi panggil balik yang dilaksanakan selepas fail dibaca. Seperti yang ditunjukkan dalam kod berikut:

Hasil pelaksanaan adalah sama seperti di atas. Tiada tangkapan skrin di sini.

fs.readFile(filename, [options], callback);

2: Bagaimana hendak menulis keseluruhan kandungan fail?

Untuk menulis pada fail, kami menggunakan kaedah writeFile atau kaedah wirteFileSync dalam modul fs. Kaedah menggunakan writeFile adalah seperti berikut (kaedah wirteFileSync adalah serupa, kecuali tiada parameter panggil balik):
const fs = require('fs');
fs.readFile('./index.html', 'utf-8', (err, data) => {
  if (err) {
    console.log('读取文件时发生错误');
  } else {
    console.log(data);
  }
});

Parameter nama fail menentukan laluan penuh dan nama fail fail yang perlu bertulis.

parameter data Untuk menentukan kandungan yang akan ditulis, nilainya boleh menjadi rentetan atau objek Penampan Kandungan dalam rentetan atau penimbal akan ditulis sepenuhnya pada fail.

Nilai pilihan ialah objek (pilihan nama pilihan ialah bendera Ia mempunyai nilai pilihan berikut:

fs.writeFile(filename, data, [options], callback);

'bendera': digunakan untuk menentukan cara. fail harus digunakan. Operasi, nilai lalai ialah 'w', yang bermaksud menulis ke fail. Semua nilai item yang dinyatakan ini adalah sama dengan nilai readFile di atas.

(Buat fail jika ia tidak wujud, dan tulis ganti fail jika ia wujud).

'mod': Atribut ini digunakan untuk menentukan kebenaran baca dan tulis untuk fail apabila ia dibuka. Nilai lalai ialah 0666 (boleh dibaca dan boleh ditulis). Terdapat banyak nilai yang boleh anda pelajari di Baidu.

  • 'pengekodan': digunakan untuk menentukan format pengekodan yang hendak digunakan untuk menulis fail. Nilai atribut yang boleh ditentukan ialah 'utf8', 'ascii' dan 'base64'.

  • panggilan balik: Parameter ini digunakan untuk fungsi panggil balik yang dilaksanakan apabila bacaan fail selesai.

  • Mari buat demo, tulis kod dalam fail index.js dalam direktori kami, buat fail message.txt dalam direktori ini dan tulis dua baris teks. Kod berikut:

  • Laksanakan arahan seperti yang ditunjukkan di bawah:

Fail message.txt akan dijana dalam direktori, seperti yang ditunjukkan di bawah

然后我们打开文件,会看到其写入的内容。

2)写入buffer对象,如下代码:

const fs = require('fs');
const str = new Buffer('我喜爱编程');
fs.writeFile('./message.txt', str, (err) => {  if (err) {
    console.log('写入文件操作失败');
  } else {
    console.log('写入文件操作成功');
  }
});

在message.txt中可以看到 '我喜爱编程' 几个字。

3)设置options参数flag属性选项,比如追加数据这些,如下代码:

const fs = require('fs');
const options = {
  flag: 'a'};
fs.writeFile('./message.txt', '这是追加的数据', options, (err) => {  if (err) {
    console.log('写入文件操作失败');
  } else {
    console.log('写入文件操作成功');
  }
});

message.txt内容编程如下了:我喜爱编程这是追加的数据

4)复制图片文件

我们可以通过readFile方法读取应用程序对应目录下的一个图片文件,在读取文件时使用base64编码,在该回调函数中使用writeFile方法,在该方法中使用base64编码将读取到的图片文件数据复制到另一个图片文件中。如下代码:

const fs = require('fs');

fs.readFile('./images/1.png', 'base64', (err, data) => {
  fs.writeFile('./images/xx.png', data.toString(), 'base64', (err) => {    if (err) {
      console.log('写文件操作失败');
    } else {
      console.log('写文件操作成功');
    }
  });
});

在image下有一个 1.png, 它会先复制,然后写入 xx.png中(该文件之前不存在的,会创建该图片文件)。

三:如何在文件中的指定位置处读入内容?

3.1)打开文件open方法或openSync方法

要实现在文件中的指定位置处读入内容,首先我们需要打开该文件,fs模块中的open方法或openSync方法打开文件。open方法使用方式如下所示:

fs.open(filename, flags, [mode], callback);

前三个参数和readFile的参数是一个意思的。最后一个参数是执行完成后的回调函数。该回调函数有两个参数,第一个是打开文件失败时的错误对象,第二个参数为一个整数值,代表打开文件时返回的文件描述符。

下面我们来打开我们刚刚创建的 message.txt文件,如下代码:

const fs = require('fs');

fs.open('./message.txt', 'r', (err, fd) => {
  console.log(fd);
});

执行结果如下所示:

3.2)从指定的位置读取文件

如上面打开文件之后,我们可以在其回调函数使用fs模块中的read方法或readSync方法从文件的指定位置处读取文件,也可以使用fs模块中的write方法或writeSync方法从文件中指定处写入数据。

fs.read(fd, buffer, offset, length, position, callback);

fd参数是 上面open打开文件返回的文件描述符。

buffer参数 是一个buffer对象,用于指定将文件数据读取到那个缓存区中。

offset:用于指定向缓冲区中写入数据的开始位置。

length:用于指定从文件中读取的字节数。

position: 用于指定读取文件时的开始位置。

callback:用于指定文件操作完毕时的回调函数。如下所示:

function(err, bytesRead, buffer) {}
  • err: 为操作失败时的错误对象。

  • bytesRead: 代表实际读取的字节数。

  • buffer:为被读取的缓冲区对象。

下面我们来看个demo代码如下:

const fs = require('fs');
// message.txt 内容为:我喜爱编程这是追加的数据
fs.open('./message.txt', 'r', (err, fd) => {
  const buf = new Buffer(255);
  // 一个汉字的utf编码为三个字节数据
  fs.read(fd, buf, 0, 9, 3, (err, bytesRead, buffer) => {
    console.log(buffer.slice(0, bytesRead).toString()); // 喜爱编  });
});

如上代码message.txt内容为:我喜爱编程这是追加的数据,position为3,从第三个字节开始读取文件,然后长度为9个字节,一个汉字3个字节,因此结果为 '喜爱编';

四:如何在文件中的指定位置处写入内容?

在文件被打开后,可以使用fs模块中的write方法或writeSync方法从一个缓存区中读取数据并从文件的指定位置处写入这些数据。使用方法如下所示:

fs.write(fd, buffer, offset, length, position, callback);

fd参数为描述符。

buffer参数为一个Buffer对象,用于指定从哪个缓存区中读取数据。

offset参数用于指定从缓存区中读取数据时的开始读取位置。

length参数用于指定从缓存区中读取的字节数。

position参数值用于指定写入文件时的开始位置。

callback参数用于指定文件写入操作执行完毕时的回调函数。该回调函数如下:

function(err, written, buffer) {}
  • err参数为写入失败时的错误对象。

  • written: 代表被写入的字节数。

  • buffer: 代表被读取的缓冲区对象。

下面是一个简单的demo,如下所示:

const fs = require('fs');

const buf = new Buffer('我喜爱编程');

fs.open('./message.txt', 'w', (err, fd) => {
  fs.write(fd, buf, 3, 9, 0, (err, written, buffer) => {    if (err) {
      console.log('写文件操作失败');
    } else {
      console.log('写文件操作成功');
    }
  });
});

在message.txt中显示为 喜爱编 这三个字。

五:如何创建与读取目录?

5.1) 创建目录mkdir和mkdirSync方法

在fs模块中,可以使用mkdir方法创建目录,该方法使用方式如下所示:

fs.mkdir(path, [mode], callback);
  • path参数用于指定需要被创建的目录完整路径及目录名。

  • mode参数用于指定该目录的权限,默认值为0777(表示任何人可读写该目录)。

  • callback是回调函数。

下面是一个简单的demo,如下所示:

const fs = require('fs');

fs.mkdir('./test', (err) => {  if (err) {
    console.log('创建目录操作失败');
  } else {
    console.log('创建目录操作成功');
  }
});

如下所示:

5.2)读取目录readdir和readdirSync方法

在fs模块中,使用readdir方法读取目录,该方法使用如下所示

fs.readdir(path, callback);

path参数用于指定需要被读取的目录的完整路径及目录名。

callback参数用于指定读取目录操作的回调函数。该回调函数如下所示:

function(err, file) {}
  • err 为读取目录操作失败的回调函数。

  • file参数值为一个数组,读取到的文件中的所有文件名。

如下demo所示:

const fs = require('fs');

fs.readdir('./', (err, files) => {  if (err) {
    console.log('读取目录操作失败');
  } else {
    console.log(files);
  }
});

如下图所示:

六:如何查看与修改文件或目录的信息?

6.1)查看文件或目录的信息

在fs模块中,可以使用stat方法或lstat方法查看一个文件或目录的信息。这两个方法唯一的区别是当查看符号链接文件的信息
时,必须使用lstat方法。使用方法如下所示:

fs.stat(path, callback);
fs.lstat(path, callback);

path参数用于被查看的文件或目录的完整路径及文件名或目录名。

callback是回调函数。如下回调函数

function(err, stats) {}
  • err 参数值为查看文件或目录信息操作失败时触发的错误对象。

  • stats参数值为一个 fs.Stats对象,该对象有如下一些方法,在这些方法中不包含任何参数。

isFile: 用于判断被查看的对象是否为一个文件,如果是则返回true,否则的话返回false。

isDirectory: 用于判断被查看的对象是否为一个目录,如果是的话返回true,否则的话返回false。

还有很多很多其他的方法,这里不一一介绍,用的比较少,有需要的话,可以自己百度一下看看。

下面是使用 stat的使用demo,查看应用程序根目录下的 message.txt文件并且在回调函数中的第二个参数值 fs.Stats对象在控制台中的输出有哪些?

const fs = require('fs');

fs.stat('./message.txt', (err, stats) => {
  console.log(stats);
});

如下图所示显示:

6.2)检查文件或目录是否存在exists和existsSync方法

在fs模块中,可以使用exists方法检查一个文件或目录是否存在,该方法使用方式如下所示:

fs.exists(path, callback);

path参数:用于指定需要被检查的文件或目录的完整路径。
callback: 是回调函数,该回调函数如下所示:

function(exists) {}
  • exists参数,当文件或目录存在时,该参数值为true,否则的话,该参数值为false。

下面是一个简单的demo,如下代码所示:

const fs = require('fs');

// 该目录是存在的
fs.exists('./message.txt', (exists) => {
  console.log(exists); // true
});

// 该目录是不存在的
fs.exists('./message2.txt', (exists) => {
  console.log(exists); // false
});

6.3) 获取文件或目录的绝对路径realpath和realpathSync方法

在fs模块中,可以使用 realpath方法获取一个文件或目录的绝对路径,该方法使用如下所示:

fs.realpath(path, [cache], callback);
  • cache 参数是可选的,path和callback是必须的。

  • path参数为需要查看的文件或目录的完整路径。

  • cache参数为一个对象,其中存放了一些预先指定的路径。具体的百度下,这个参数用的不多。

  • callback是回调函数,该回调函数有2个参数,err参数值为获取目录的绝对路径失败的错误对象。resolvedPath参数值为获取
    到的文件或目录的绝对路径。

下面是一个简单的demo,如下所示:

const fs = require('fs');

fs.realpath('./message.txt', (err, resolvedPath) => {  if (err) {    throw err;
  } else {
    console.log(resolvedPath);
  }
});

执行如下所示:

6.4) 使用ReadStream对象读取文件

在fs模块中,可以使用createReadStream方法创建一个将文件内容读取为流数据的ReadStream对象,该方法使用如下所示:

fs.createReadStream(path, [options]);

path 该参数用于指定需要被读取的文件的完整路径及文件名。

options为一个对象,它有如下属性:

  • flags: 用于指定对该文件采取什么操作,默认值为 'r', 它的用法和readFile方法中的flags属性一样的。

  • encoding: 指定使用什么编码来读取该文件,可指定的值有 'utf8', 'ascii', 'base64'. 默认值为null.

  • start: 指定文件的开始读取位置。

  • end: 指定文件的结束读取位置。

还有很多其他的参数,这里不一一讲解,可以自行百度下即可。

下面简单的使用一个demo来了解下使用:如下代码:

const fs = require('fs');/*
 一个汉字三个字节,message.txt的内容为:我喜爱编写代码
 因此从第三个位置开始,到第十二个位置结束,因此数据应该为 喜爱编写*/const options = {
  start: 3, 
  end: 12};
const file = fs.createReadStream('./message.txt', options);

file.on('open', (fd) => {
  console.log('开始读取文件');
});

file.on('data', (data) => {
  console.log('读取到的数据:' + data);
});

file.on('end', () => {
  console.log('文件已全部读取完毕');
});

file.on('close', () => {
  console.log('文件被关闭');
});

file.on('error', (err) => {
  console.log('读取文件失败');
});

如下图所示:

我们可以使用 ReadStream对象的pause方法暂停data事件的触发,同时也意味着停止文件的读取操作。而已经被读取到的操作系统缓存区中的数据也将被暂时保存在操作系统缓冲区中,在使用了pause方法暂停data事件的触发之后,也可以使用ReadStream对象的resume方法恢复data事件的触发,也就意味着可以继续读取文件的数据。

如下demo:

const fs = require('fs');

const readStream = fs.createReadStream('./message.txt');

readStream.pause();

readStream.on('data', (data) => {
  console.log('获取到的数据为:' +data);
});

setTimeout(() => {
  readStream.resume();
}, 1000);

读取过程中,断听了一秒后,继续把数据读出来了。

注意:写入文件的方法是 WriteStream, 使用方式和读方式类似,这里不多介绍。

【推荐学习:《nodejs 教程》】

Atas ialah kandungan terperinci Modul mana dalam nodejs menyediakan API operasi fail. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn