Maison > interface Web > js tutoriel > le corps du texte

Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)

青灯夜游
Libérer: 2021-08-18 10:22:48
avant
2417 Les gens l'ont consulté

Cet article vous présentera les opérations sur les fichiers dans Nodejs (créer et supprimer des répertoires/fichiers, renommer, ajouter du contenu, lire du contenu) et parler brièvement des flux.

Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)

Opération sur les fichiers NodeJS

创建目录和文件

  • 我们可以使用fs.mkdir fs.writeFile来分别创建目录和文件。
  • mkdir()可以接收三个参数,第一个是路径,第二个是个可选项代表权限,这个我们一般不需要,第三个参数是一个回调函数,我们可以在这里面做一些处理。
/* learnNode.js */
let fs = require('fs');
fs.mkdir('js',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('未出错')
  }
})
Copier après la connexion
  • writeFile()可以接收四个参数,第一个是路径,第二个是文件内容,第三个可选项代表权限,第四个是回调函数。
/* learnNode.js */
let fs = require('fs');
fs.writeFile('./js/newJs.js','console.log("写入这个")',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('没出错')
  }
})
Copier après la connexion

Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)

  • 可以看到我们成功创建了目录并写入了一个文件。

检测文件

  • 我们可以通过fs.stat来检测一个路径的文件是为目录还是文件,进而可以做一些操作。
/* learnNode.js */
let fs = require('fs');
fs.stat('./js/newJs.js', (error, stats) => {
  if(error) {
    console.log(error);
    return false;
  } else {
    console.log(`是否文件:${stats.isFile()}`); 
    console.log(`是否目录:${stats.isDirectory()}`); 
    return false;
  }
})
Copier après la connexion
  • star()主要接收两个参数第一个是要检测的文件,第二个是一个回调函数,这个回调函数有两个参数,分别是err错误和stats对象,这个对象提供有关文件的信息,我们可以对这个对象信息来进行判断。

Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)

删除文件和删除目录

  • 既然我们可以使用NodeJS创建文件那当然我们也可以删除文件,主要使用的是fs.unlink``fs.rmdir这两个API
/* learnNode.js */
let fs = require('fs');
fs.unlink('./js/newJs.js', (err) => {
  if (err) throw err;
  console.log('文件已删除');
});
fs.rmdir('./js',(err)=>{
  if (err) throw err;
  console.log('目录已删除');
})
Copier après la connexion
  • 这两个API都分别接收两个参数是路径和回调函数,执行node learnNode.js可以看到我们文件已经成功删除。

Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)

重命名

  • 我们可以使用fs.rename来对文件重命名。
/* learnNode.js */
let fs = require('fs');
fs.rename('oldJs.js','newJs.js',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('未出错')
  }
})
Copier après la connexion
  • rename()可以接收三个参数第一个是路径第二个是更改的名称,第三个是回调函数,值得注意的是,如果第一个参数和第二个参数对应的文件所在的位置不一样时,他不会重命名之前那个文件而是直接把文件剪切放到另一个地方。
/* learnNode.js */
let fs = require('fs');
fs.rename('newJs.js','./js/oldJs.js',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('剪切到js文件夹内了')
  }
})
Copier après la connexion

追加内容

  • 上面我们说到创建文件的时候可以顺便写入东西,那么我们可不可以直接在文件追加文字呢?我们可以使用fs.appendFile
/* learnNode.js */
let fs = require('fs');
fs.appendFile('newJs.txt','我是追加的内容',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('追加内容')
  }
})
Copier après la connexion
  • appendFile()可以接收三个参数,第一个是路径,第二个是内容,第三个是回调函数,执行node learnNode.js即可。

Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)

读取文件和读取目录

  • 以上都是对文件进行增删改的操作,我们现在还需要掌握一下读取内容,我们可以使用fs.readFilefs.readdir"]
dansArticle précédent

Nous savons que si nous voulons référencer un module, nous devons utiliser require< /code> , et le protagoniste que nous souhaitons présenter aujourd'hui est le module <code>fs, qui est un module de fichiers intégré à NodeJS. Ce module possède de nombreuses API</. code> que nous pouvons utiliser. <img src="https://img.php.cn/upload/image/235/577/894/162925288115805Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)" title="162925288115805Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)" alt="Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)"/></p><h3 data-id="heading-2"><p>Créer des répertoires et des fichiers<img src="https://img.php.cn/upload/image/918/180/748/162925288813551Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)" title="162925288813551Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)" alt="Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)"/></h3></p>🎜Nous pouvons utiliser <code>fs.mkdir fs.writeFile pour Créez des répertoires et des fichiers séparément. 🎜🎜mkdir() peut recevoir trois paramètres. Le premier est le chemin, et le second est une option facultative représentant les autorisations. Le troisième paramètre est une fonction de rappel. peut effectuer un traitement ici. 🎜🎜

/* learnNode.js */
let fs = require(&#39;fs&#39;);
fs.readFile(&#39;newJs.txt&#39;, (err, data) => {
  if(err) {
    console.log(&#39;出错&#39;);
  } else {
    console.log("读取文件成功!");
    console.log(data);
  }
})
Copier après la connexion
🎜🎜writeFile() peut recevoir quatre paramètres, le premier est le chemin, le second est le contenu du fichier, la troisième option représente les autorisations et la quatrième est la fonction de rappel. 🎜🎜
/* learnNode.js */
let fs = require(&#39;fs&#39;);
fs.readdir(&#39;./&#39;, (err, data) => {
  if(err) {
    console.log(&#39;出错&#39;);
  } else {
    console.log("读取目录成功!");
    console.log(data);
  }
})
Copier après la connexion
🎜Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)🎜 🎜🎜Vous pouvez voir que nous avons réussi à créer le répertoire et à écrire un fichier. 🎜🎜

🎜Détecter les fichiers🎜

🎜🎜Nous pouvons utiliser fs.stat pour détecter si un fichier dans un chemin est un répertoire ou un fichier, puis Certaines opérations peuvent être effectuées. 🎜🎜
var fs = require("fs");
var data = &#39;&#39;;
// 创建可读流
var readerStream = fs.createReadStream(&#39;newJs.txt&#39;);
// 设置编码为 utf8。
readerStream.setEncoding(&#39;UTF8&#39;);
// 处理流事件 遇到有数据时执行这个
readerStream.on(&#39;data&#39;, function(chunk) {
  data += chunk;
  console.log(chunk,&#39;流遇到数据了&#39;)
});
// 处理流事件 流结束时执行这个
readerStream.on(&#39;end&#39;,function(){
  console.log(data,&#39;流结束了&#39;);
});
 // 处理流事件 流报错时执行这个
readerStream.on(&#39;error&#39;, function(err){
  console.log(err.stack);
});
console.log("程序执行完毕");
Copier après la connexion
Copier après la connexion
🎜🎜star() reçoit principalement deux paramètres Le premier est le fichier à détecter, et le second est une fonction de rappel. Cette fonction de rappel a deux paramètres, à savoir err error et stats, cet objet fournit des informations sur le fichier, nous pouvons juger les informations de cet objet. 🎜🎜🎜Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)🎜< h3 data-id="heading-4">🎜Supprimer des fichiers et supprimer des répertoires🎜🎜🎜Puisque nous pouvons utiliser NodeJS pour créer des fichiers, bien sûr, nous pouvons également supprimer des fichiers, principalement en utilisant fs.unlink``fs.rmdirCes deux API. 🎜🎜
var fs = require("fs");
var data = &#39;我是小卢,我再写入流&#39;;
// 创建一个可以写入的流,写入到文件 newJs.txt 中
var writerStream = fs.createWriteStream(&#39;newJs.txt&#39;);
// 使用 utf8 编码写入数据
writerStream.write(data,&#39;UTF8&#39;);
// 标记文件末尾
writerStream.end();
// 处理流事件 完成和报错时执行
writerStream.on(&#39;finish&#39;, function() {
    console.log("写入完毕");
});
writerStream.on(&#39;error&#39;, function(err){
   console.log(err.stack);
});
console.log("程序执行完毕");
Copier après la connexion
Copier après la connexion
🎜🎜Les deux API reçoivent respectivement deux paramètres, qui sont le chemin et la fonction de rappel. L'exécution de node learnNode.js peut voir que notre fichier a été supprimé avec succès. 🎜🎜🎜Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)🎜< h3 data-id="heading-5">🎜Rename🎜🎜🎜Nous pouvons utiliser fs.rename pour renommer le fichier. 🎜🎜rrreee🎜🎜rename() peut recevoir trois paramètres Le premier est le chemin, le second est le nom modifié et le troisième est la fonction de rappel. Lorsque l'emplacement du fichier correspondant au deuxième paramètre est différent, il ne renommera pas le fichier précédent mais coupera directement le fichier et le mettra dans un autre emplacement. 🎜🎜rrreee

🎜Ajouter du contenu🎜

🎜🎜Nous avons mentionné ci-dessus que nous pouvons écrire des choses lors de la création d'un fichier, pouvons-nous donc ajouter du texte directement au fichier ? Nous pouvons utiliser fs.appendFile. 🎜🎜rrreee🎜🎜appendFile() peut recevoir trois paramètres, le premier est le chemin, le deuxième est le contenu et le troisième est la fonction de rappel, exécutez node learnNode.js</ code> code> suffit. 🎜🎜🎜<img src="https://img.php.cn/upload/image/847/247/243/162925287798940Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)" title="162925287798940Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)" alt="Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)"/>🎜< h3 data-id="heading-7">🎜Lire des fichiers et lire des répertoires🎜</h3>🎜🎜Ce qui précède sont toutes les opérations d'ajout, de suppression et de modification de fichiers Nous devons maintenant également maîtriser le contenu de lecture que nous pouvons utiliser. <code>fs.readFile et fs.readdir lisent respectivement les fichiers et les répertoires. 🎜🎜rrreee🎜🎜🎜rrreee🎜🎜🎜
  • 可以看到我们两个API都是接收两个参数,第一个是路径,第二个是回调函数,这个回调函数也有两个参数里面包含了data信息,我们可以打印这个data信息来获取内容。

stream(流)

  • 最后我们来简单聊聊stream,翻译过来就是的意思,提到流你会想到什么,河流,水流,都是从一个源头到另一个源头,就像水龙头从开关到流到地面,stream也是这样一个过程。
  • Stream 有四种流类型:
    • Readable - 可读操作。
    • Writable - 可写操作。
    • Duplex - 可读可写操作.
    • Transform - 操作被写入数据,然后读出结果。
  • 在stream的过程中,我们也有事件可以使用,比如检测到错误触发的error,有数据时触发的data
    • data - 当有数据可读时触发。
    • end - 没有更多的数据可读时触发。
    • error - 在接收和写入过程中发生错误时触发。
    • finish - 所有数据已被写入到底层系统时触发。
  • 接下来简单举个例子理解一下吧。

读取流

var fs = require("fs");
var data = &#39;&#39;;
// 创建可读流
var readerStream = fs.createReadStream(&#39;newJs.txt&#39;);
// 设置编码为 utf8。
readerStream.setEncoding(&#39;UTF8&#39;);
// 处理流事件 遇到有数据时执行这个
readerStream.on(&#39;data&#39;, function(chunk) {
  data += chunk;
  console.log(chunk,&#39;流遇到数据了&#39;)
});
// 处理流事件 流结束时执行这个
readerStream.on(&#39;end&#39;,function(){
  console.log(data,&#39;流结束了&#39;);
});
 // 处理流事件 流报错时执行这个
readerStream.on(&#39;error&#39;, function(err){
  console.log(err.stack);
});
console.log("程序执行完毕");
Copier après la connexion
Copier après la connexion
  • 我们一开始可以创建一个可读流fs.createReadStream(),参数是你要读的文件路径。
  • 当遇到了数据时会执行readerStream.on(&#39;data&#39;,callback()),如下图所示。
  • 当流结束时会执行readerStream.on(&#39;end&#39;,callback()),如下图所示。

Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)

写入流

  • 我们上面演示了如何通过流读取一个文件,接下来我们试试通过流写入文件。
var fs = require("fs");
var data = &#39;我是小卢,我再写入流&#39;;
// 创建一个可以写入的流,写入到文件 newJs.txt 中
var writerStream = fs.createWriteStream(&#39;newJs.txt&#39;);
// 使用 utf8 编码写入数据
writerStream.write(data,&#39;UTF8&#39;);
// 标记文件末尾
writerStream.end();
// 处理流事件 完成和报错时执行
writerStream.on(&#39;finish&#39;, function() {
    console.log("写入完毕");
});
writerStream.on(&#39;error&#39;, function(err){
   console.log(err.stack);
});
console.log("程序执行完毕");
Copier après la connexion
Copier après la connexion
  • 我们首先创建一个流,然后将data数据写入newJs.txt文件中。
  • 当流写入完毕时会执行readerStream.on('finish',callback()),如下图所示。

Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)

  • 可以看到该newJs.txt文件中已经存在了我们写入的数据。

Vous présenter rapidement les opérations sur les fichiers et les flux Nodejs (streams)

写在最后

总的来说NodeJS提供了fs文件操作模块,这个模块有很多的API,上面只是简单的展示了一下,还有很多有趣的API大家只需要用到的时候去官网查就好了,因为NodeJS能操作文件,小至文件查找,大至代码编译。换个角度讲,几乎也只需要一些数据处理逻辑,再加上一些文件操作,就能够编写出大多数前端工具。

原文地址:https://juejin.cn/post/6997204352683212831

作者:快跑啊小卢_

更多编程相关知识,请访问:编程视频!!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:掘金--快跑啊小卢_
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal