Toutes les opérations liées aux fichiers dans nodejs sont dans le module fs, et les opérations de lecture et d'écriture sont des opérations que nous utilisons souvent. Le module fs de nodejs nous fournit readFile, read, createReadStream pour les opérations de lecture. writeFile, write et createWriteStream nous sont fournis pour les opérations d'écriture. Analysons leurs différences :
1. readFile et writeFile
1. La méthode readFile consiste à lire le contenu complet du fichier à lire dans la zone de cache, puis à lire le contenu du fichier à partir de la zone de cache :
fs.readFile('./test.txt', 'utf8', function(err, data){ console.log(data); });
La méthode synchrone correspondante est :
var data = fs.readFileSync('./test.txt', 'utf8'); console.log(data);
La différence entre la méthode synchrone et la méthode asynchrone est : dans les opérations effectuées à l'aide de la méthode synchrone méthode Avant la fin, le code suivant ne peut pas être exécuté ; la méthode asynchrone renvoie le résultat de l'opération en tant que paramètre de la fonction de rappel. Une fois la méthode appelée, le code suivant peut être exécuté immédiatement et la fonction de rappel correspondante sera appelée après l'appel. la lecture est terminée.
2. La méthode writeFile consiste à lire le contenu complet du fichier à écrire dans la zone de cache, puis à écrire immédiatement le contenu de la zone de cache dans le fichier, ce qui est synchrone et asynchrone Les opérations spécifiques sont les suivantes :
//异步方法 fs.writeFile('./message.txt', '这是第一行',function(err){ if(err) console.log('写文件操作失败'); else console.log('写文件操作成功'); }); //同步方法 fs.writeFileSync('./message.txt','这是第一行');
Pour les opérations de lecture et d'écriture ci-dessus, Node.js traite le contenu du fichier dans son ensemble et lui alloue une zone de cache. Et le contenu du fichier est lu dans la zone de cache en même temps. Pendant cette période, Node.js ne pourra effectuer aucun autre traitement. Par conséquent, lors de la lecture et de l'écriture de fichiers volumineux, la zone de cache peut « exploser ».
2. lire et écrire
1. La méthode read ou readSync lit le contenu du fichier en continu. un morceau de contenu est lu dans la zone de cache, et enfin le contenu du fichier est lu à partir de la zone de cache. Les opérations spécifiques sont les suivantes :
var fs = require('fs'); fs.open('./message.txt','r',function(err,fd){ var buf = new Buffer(225); //读取fd文件内容到buf缓存区 fs.read(fd,buf,0,9,3,function(err,bytesRead,buffer){ console.log(buf.slice(0,bytesRead).toString()); }); var buff = new Buffer(225); //位置设置为null会默认从文件当前位置读取 fs.read(fd,buff,0,3,null,function(err,bytesRead,buffer){ console.log(buff.slice(0,bytesRead).toString()); }); var buffer = new Buffer(225); //同步方法读取文件 var bytesRead = fs.readFileSync(fd,buffer,0,9,3); console.log(bytesRead); console.log(buffer.slice(0,bytesRead).toString()); });
2. la méthode write ou writeSync Lorsque, node.js exécute le processus suivant : 1. Écrivez les données à écrire dans une zone de cache mémoire ; 2. Une fois la zone de cache pleine, écrivez le contenu de la zone de cache dans le fichier ; . Répétez les étapes 1 et 2 jusqu'à ce que toutes les données soient écrites dans le fichier. Les opérations spécifiques sont les suivantes :
var fs = require('fs');var buf = new Buffer('我喜爱编程'); fs.open('./mess.txt','w',function(err,fd){ fs.write(fd,buf,3,9,0,function(err,written,buffer){ fs.write(fd,buf,12,3,null,function(err,written,buffer){ if(err) console.log('写文件操作失败'); console.log('写文件操作成功'); }); }); //同步写入 fs.writeSync(fd,buf,3,9,0); });
Pour les opérations de lecture et d'écriture ci-dessus, node.js divisera le fichier en morceaux et l'opérera étape par étape, permettant à d'autres opérations de être effectué pendant le processus de lecture et d’écriture de fichiers.
但有的时候我们并不关心整个文件的内容,而只关注从文件中读取到的某些数据,以及读取到数据时需要执行的处理,这时我们可以使用文件流来处理。
三、createReadStream和createWriteStream
1、createReadStream方法创建一个将文件内容读取为流数据的ReadStream对象,方法如下所示:
var fs = require('fs');var readStream = fs.createReadStream('./message.txt',{start:3,end:12}); readStream.on('open',function(fd){ console.log('开始读取文件'); }); readStream.on('data',function(data){ console.log('读取到数据:'); console.log(data); }); readStream.on('end',function(){ console.log('文件已全部读取完毕'); }); readStream.on('close',function(){ console.log('文件被关闭'); }); readStream.on('error',function(err){ console.log('读取文件失败'); });
2、createWriteStream方法创建一个将流数据写入文件中的WriteStream对象,方法如下所示:
var fs = require('fs');var file = fs.createReadStream('./message.txt');var out = fs.createWriteStream('./anotherMessage.txt'); file.on('data',function(data){ out.write(data); }); out.on('open',function(fd){ console.log('需要被写入的文件已打开'); }); file.on('end',function(){ //将操作系统缓存区中的数据全部写入文件 out.end('再见',function(){ console.log('文件全部写入完毕'); console.log('共写入'+out.bytesWritten+'数据'); }); });
以上方法可以对读写文件的过程中进行监听,并定义相关的方法pause和resume暂停或恢复文件的读取操作,可以监听写入时缓存区数据是否已满或者是否已全部输出,如下所示:
//监听writeStream对象的drain事件var fs = require('fs');var out = fs.createWriteStream('./test1.txt');for(var i=0;i<10000;i++){ //返回true或false true代表缓存区已满 var flag = out.write(i.toString()); console.log(flag); } out.on('drain',function(){ console.log('操作系统缓存区中的数据已全部输出'); var out = fs.createWriteStream('./test2.txt'); for(var i=0;i<10;i++){ var flag = out.write(i.toString()); console.log(flag); } out.on('drain',function(){ console.log('操作系统缓存区中的数据已全部输出'); }); });
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!