Node.js 使用 fs 模块做文件 copy 的四种方法
Posted 雪松
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js 使用 fs 模块做文件 copy 的四种方法相关的知识,希望对你有一定的参考价值。
首先引入文件模块 var fs = require(\'fs\');
Method 1
function copy(src, target)
console.log(target);
fs.writeFileSync(target, fs.readFileSync(src));
- 代码简短清晰
- 同步读取文件,容易阻塞
- 读取大文件时,容易内存溢出
- 尝试复制一个1.5G的电影 结果内存轻松溢出如图
Method 2
function copy(src, target)
var rs = fs.createReadStream(src),
ws = fs.createWriteStream(target);
fs.on(\'data\', function(chunk)
console.log(\'read\');
ws.write(chunk, function()
console.log(\'write\');
)
)
fs.on(\'end\', function()
ws.end();
)
- 读取大文件时不太容易导致内存溢出
- 代码比较复杂
- 由于读取和写入的速度不一样,同样存在内存溢出的风险,不过比 Method 1 好很多
Method 3
根据 Method 2 改进
function copy(src, target)
var rs = fs.createReadStream(src),
ws = fs.createWriteStream(target);
fs.on(\'data\', function(chunk)
console.log(\'read\');
if (ws.write(chunk, function()
console.log(\'write\');
) === false)
rs.pause();
else
rs.resume();
)
fs.on(\'end\', function()
ws.end();
)
- 同步了读取和写入的速度,没有内存溢出的风险
- 代码比较复杂
Method 4
node中支持pipe方法,类似于管道,将读出来的内容通过管道写入到目标文件中
function copy(src, target)
fs.createReadStream(src).pipe(fs.createWriteStream(target));
- 代码简洁
- 没有内存溢出的风险
1.64G 的文件用了20秒复制完毕,没有内存溢出
node.js 使用fs模块对系统文件及目录进行读写操作
如果要用这个模块,首先需要引入,fs已经属于node.js自带的模块,所以直接引入即可
var fs = require('fs');
1.读取文件readFile方法使用
fs.readFile(filename,[option],callback) 方法读取文件。
参数说明:
- filename String 文件名
- option Object
- encoding String |null default=null
- flag String default='r'
- callback Function
// 设置编码格式
fs.readFile('./test.txt', 'utf-8', function(err, data)
// 读取文件失败/错误
if (err)
throw err;
// 读取文件成功
console.log('utf-8: ', data.toString());
);
2.写入文件writeFile方法使用
使用fs.writeFile(filename,data,[options],callback)写入内容到文件。
参数说明:
- filename String 文件名
- data String|buffer
- option Object
- encoding String |nulldefault='utf-8'
- mode Number default=438(aka 0666 in Octal)
-
- flag Stringdefault='w'
- callback Function
var fs = require('fs'); // 引入fs模块
// 写入文件内容(如果文件不存在会创建一个文件)
// 写入时会先清空文件
fs.writeFile('./test2.txt', 'test test', function(err)
if (err)
throw err;
console.log('Saved.');
// 写入成功后读取测试
fs.readFile('./test2.txt', 'utf-8', function(err, data)
if (err)
throw err;
console.log(data);
);
);
因为默认flag='w'是写,会清空文件,想要追加,可以传递一个flag参数,如下。
flag传值,r代表读取文件,w代表写文件,a代表追加。
var fs = require('fs'); // 引入fs模块
// 写入文件内容(如果文件不存在会创建一个文件)
// 传递了追加参数 'flag': 'a'
fs.writeFile('./test2.txt', 'test test', 'flag': 'a' , function(err)
if (err)
throw err;
console.log('Saved.');
// 写入成功后读取测试
fs.readFile('./test2.txt', 'utf-8', function(err, data)
if (err)
throw err;
console.log(data);
);
);
3.创建目录mkdir使用
使用fs.mkdir(path,[mode],callback)创建目录,path是需要创建的目录,[mode]是目录的权限(默认是0777),callback是回调函数。
var fs = require('fs'); // 引入fs模块
// 创建 newdir 目录
fs.mkdir('./newdir', function(err)
if (err)
throw err;
console.log('make dir success.');
);
4.读取目录readdir
var fs = require('fs'); // 引入fs模块
fs.readdir('./newdir', function(err, files)
if (err)
throw err;
// files是一个数组
// 每个元素是此目录下的文件或文件夹的名称
console.log(files);
);
5.删除文件unlink
var fs = require('fs'); // 引入fs模块
fs.unlink('./newfile.txt', function(err)
if (err)
console.log(err);
return false;
console.log("success");
);
6.删除空文件夹rmdir
var fs = require('fs'); // 引入fs模块
fs.rmdir('./newdir', function(err)
if (err)
console.log(err);
return false;
console.log("success");
);
以上是关于Node.js 使用 fs 模块做文件 copy 的四种方法的主要内容,如果未能解决你的问题,请参考以下文章