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),实现文件读写复制