Node.js提供了文件操作的api,但没有直接拷贝文件的相关操作。不过可以利用fs模块写个简单的拷贝文件程序。
var fs = require(‘fs‘); function copy(filename,src) { fs.writeFileSync(filename, fs.readFileSync(src)); //filename如果不存在,则会在路径上新建文件 } function main(argv) { copy(argv[0], argv[1]); //argv[0]为要拷贝的文件名,argv[1]为拷贝数据的来源 } fs.stat(process.argv.slice(2)[1], function (err, stats) { //检验是否为文件 if(stats.isFile()){ main(process.argv.slice(2)); }else{ console.log(‘invalid file‘); } });
以上程序通过stats类获取文件信息,isFile判断是否为文件,再通过fs.writeFileSync,fs.readFileSync同步写入或读取文件。
process.argv获得命令行参数。然而argv[0],argv[1]为NodeJS执行程序的绝对路径和运行模块的绝对路径,所以argv[2]开始才是输入的参数,可以通过slice()截取参数。
然而这样的方式是将文件内容全部先读取至内存再全部一次性写入至指定路径,如果文件很大,内存则承受不了,所以对于超大文件的拷贝可以用数据流的方式实现,将原程序的copy函数修改一下
function copy(filename,src) { fs.createReadStream(src).pipe(fs.createWriteStream(filename)); }
fs.createReadStream创建了一个只读数据流,fs.createWriteStream创建了一个只写数据流,pipe()将两个数据流连接在一起进行传输。
通过数据流读取文件时,会将大文件分多次进行读取,即使文件没读取完也可以对读取的数据进行操作,写入文件也是如此,用这种方式来拷贝数据是十分高效的。
文件操作相关API:http://nodejs.cn/api/fs.html
时间: 2024-11-05 22:33:36