Heim  >  Artikel  >  Web-Frontend  >  Drei Möglichkeiten zum Lesen und Schreiben von Dateien in NodeJS

Drei Möglichkeiten zum Lesen und Schreiben von Dateien in NodeJS

零到壹度
零到壹度Original
2018-03-28 17:27:247510Durchsuche

Alle dateibezogenen Vorgänge in nodejs befinden sich im fs-Modul, und Lese- und Schreibvorgänge sind Vorgänge, die wir häufig verwenden. Das fs-Modul von nodejs stellt uns drei Methoden bereit: readFile, read, createReadStream. writeFile, write und createWriteStream stehen uns für Schreibvorgänge zur Verfügung:

1. readFile und writeFile

1. Die readFile-Methode besteht darin, den gesamten Inhalt der zu lesenden Datei in den Cache-Bereich zu lesen und dann den Dateiinhalt aus dem Cache-Bereich zu lesen. Der spezifische Vorgang ist wie folgt:

fs.readFile('./test.txt', 'utf8', function(err, data){
    console.log(data);  
});

Die entsprechende synchrone Methode ist:

var data = fs.readFileSync('./test.txt', 'utf8');
console.log(data);

Der Unterschied zwischen der synchronen Methode und der asynchronen Methode besteht darin, dass die Operationen mit der synchronen Methode ausgeführt werden Methode Vor dem Ende kann der nachfolgende Code nicht ausgeführt werden. Die asynchrone Methode gibt das Operationsergebnis als Parameter der Rückruffunktion zurück. Nach dem Aufruf der Methode kann der nachfolgende Code sofort ausgeführt werden und die entsprechende Rückruffunktion wird aufgerufen Das Lesen ist abgeschlossen.

2. Die Methode writeFile liest den gesamten Inhalt der Datei, die in den Cache-Bereich geschrieben werden soll, und schreibt dann den Inhalt im Cache-Bereich auf einmal in die Datei ist synchron und asynchron. Die spezifischen Vorgänge lauten wie folgt:


//异步方法
fs.writeFile('./message.txt', '这是第一行',function(err){  
  if(err) console.log('写文件操作失败');    
  else console.log('写文件操作成功');
});

//同步方法
fs.writeFileSync('./message.txt','这是第一行');

Für die oben genannten Lese- und Schreibvorgänge behandelt Node.js den Dateiinhalt als Ganzes und weist einen Cache-Bereich dafür zu. Der Dateiinhalt wird sofort in den Cache-Bereich eingelesen. Während dieser Zeit kann Node.js keine andere Verarbeitung durchführen. Daher kann es beim Lesen und Schreiben großer Dateien dazu kommen, dass der Cache-Bereich „explodiert“.

2. Lesen und Schreiben

1. Die Lese- oder ReadSync-Methode liest den Dateiinhalt kontinuierlich Ein Teil des Inhalts wird in den Cache-Bereich gelesen, und schließlich wird der Dateiinhalt aus dem Cache-Bereich gelesen. Die spezifischen Vorgänge sind wie folgt:

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 Wenn die Methode write oder writeSync ausgeführt wird, führt node.js den folgenden Prozess aus: 1. Schreiben Sie die zu schreibenden Daten in einen Speicher-Cache-Bereich. 2. Schreiben Sie den Inhalt des Cache-Bereichs in die Datei, nachdem der Cache-Bereich voll ist . Wiederholen Sie die Schritte 1 und 2, bis alle Daten in die Datei geschrieben sind. Die spezifischen Vorgänge lauten wie folgt:

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);
});

Für die oben genannten Lese- und Schreibvorgänge unterteilt node.js die Datei in Teile und bearbeitet sie Schritt für Schritt, sodass andere Vorgänge ausgeführt werden können beim Lesen und Schreiben von Dateien ausgeführt werden.

但有的时候我们并不关心整个文件的内容,而只关注从文件中读取到的某些数据,以及读取到数据时需要执行的处理,这时我们可以使用文件流来处理。

三、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('操作系统缓存区中的数据已全部输出');
    });
});

Das obige ist der detaillierte Inhalt vonDrei Möglichkeiten zum Lesen und Schreiben von Dateien in NodeJS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn