不积跬步,无以至千里;不积小流,无以成江海。

Node.js-文件操作模块(fs),实现文件读写复制

Node.js 康康 1798℃ 1评论

Nodejs文件 I/O 是由简单封装的标准 POSIX 函数提供的。 通过 require('fs') 使用该模块。 所有的方法都有异步和同步的形式。异步形式始终以完成回调作为它最后一个参数。 传给完成回调的参数取决于具体方法,但第一个参数总是留给异常。 如果操作成功完成,则第一个参数会是 null 或 undefined。当使用同步形式时,任何异常都会被立即抛出。 可以使用 try/catch 来处理异常,或让它们往上冒泡。

一、使用 createReadStream和createWriteStream实现文件复制

文件在读取和写入的时候由于不是同步执行,因此必须解决文件读取的一致性,使用data事件和drain事件监听文件读写情况 ,并对文件读写进行暂停或恢复等控制

新建filecopy.js文件,复制如下代码,并在当前目录下建一个test.zip文件

//filecopy.js
var fs = require("fs"); 

function testFileCopy() {
    var readStream = fs.createReadStream("test.zip"); //读取文件流
    var writeStream = fs.createWriteStream("test_copy.zip"); //要写入的目标文件
    //读取数据 监听事件
    var totalSize = 0;
    readStream.on("data" ,function (chunk) {
        var buffer_good = writeStream.write(chunk);
        totalSize += chunk.length;
        if(!buffer_good){
            readStream.pause(); //暂停写入
            console.log("暂停读取!总大小:"+totalSize);
        }
    });
    writeStream.on("drain",function () {
        readStream.resume(); //恢复读取
        console.log("恢复读取!");
    });

}

testFileCopy(); //运行该方法 当前目录生成test_copy.zip文件

二、使用pipe管道方法复制文件

//使用nodejs自带的pipe方法 该方法实现原理同上
function testPipe() {
    var readStream = fs.createReadStream("test.zip"); //读取文件流
    var writeStream = fs.createWriteStream("test_pipe_copy.zip");
    readStream.pipe(writeStream);
}

testPipe(); //运行该方法 当前目录生成test_pipe_copy.zip文件 是不是超级简单

使用createWriteStream新建文件

//write方法
var writeStream = fs.createWriteStream("test.txt");
writeStream.write("我是新生成的文件!"); //运行后当前目录生成文件test.txt 内容为 我是新生成的文件!

三、读取文件(readFile)、写入文件(writeFile)

readFile,writeFile均为异步函数, readFile读取文件为二进制流,可直接response输出

//使用readFile,writeFile 读写文件
function testReadFile(){
    fs.readFile("test.txt" , function (err, data) {
        console.log(data.length);
        console.log(data);
        fs.writeFile("test_copy.txt", data ); //将二进制流写入到test_copy.txt中
    });
}
testReadFile(); 
//运行结果(该目录生成test_copy.txt):
27
<Buffer e6 88 91 e6 98 af e6 96 b0 e7 94 9f e6 88 90 e7 9a 84 e6 96 87 e4 bb b6 ef bc 81>

四、总结
fs模块封装了大量的文件操作方法,如 文件权限的操作,获取文件信息的操作,创建目录、判断文件等等
关于文件操作参考API:http://nodejs.cn/api/fs.html

转载请注明:左手代码右手诗 » Node.js-文件操作模块(fs),实现文件读写复制

喜欢 (3)or分享 (0)
发表我的评论
取消评论

 

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 可以可以
    匿名2017-06-30 22:19 回复