Node.js的文件系统模块(File System)
2017-03-20 10:25
781 查看
Node.js的文件系统模块(File System)
File System - 文件系统模块 - requires(‘fs’)
这是node的一个核心模块,提供了操作文件的一系列API,需要使用require导入后使用。本文将结合示例介绍node.js中文件系统模块的一系列的相对比较重要且常用的方法。
1. fs.open(path,flags,[mode],callback) , 异步打开文件。
参数: path:要打开的文件的路径 flags:打开文件的方式:读/写 mode:设置文件的模式:读/写/执行 4/2/1 0777 callback(err,fd):回调函数,带两个参数: err——保存打开文件失败时的信息,如果文件打开成功则为null fd-被打开的文件的标识
flags参数选项:
r 以读取模式打开文件。如果文件不存在抛出异常。 r+ 以读写模式打开文件。如果文件不存在抛出异常。 rs 以同步的方式读取文件。 rs+ 以同步的方式读取和写入文件。 w 以写入模式打开文件,如果文件不存在则创建。 wx 类似 'w',但是如果文件路径存在,则文件写入失败。 w+ 以读写模式打开文件,如果文件不存在则创建。 wx+ 类似 'w+', 但是如果文件路径存在,则文件读写失败。 a 以追加模式打开文件,如果文件不存在则创建。 ax 类似 'a', 但是如果文件路径存在,则文件追加失败。 a+ 以读取追加模式打开文件,如果文件不存在则创建。 ax+ 类似 'a+', 但是如果文件路径存在,则文件读取追加失败。
示例:
1.txt文件内容:
hello ,this is Cynthia .
fs.js文件:
var fs = require('fs'); fs.open('1.txt','r',function (err,fd) { //console.log(err); //null ,成功打开了文件 // console.log(fd); //3 if(err){ console.log('文件打开失败!'); }else{ console.log('文件打开成功!'); } });
2. fs.openSync(path,flags,[mode]) , 同步打开文件。
示例:var fs = require('fs'); var fd = fs.openSync('1.txt','r'); console.log(fd); //3
3.fs.read(fd,buffer,offset,length,position,callback) , 从指定的文档标识开始异步的读取文件数据。
参数: fd:通过open成功打开文件时文件的标识。 buffer:buffer对象。 offset:偏移量,表示文件读取到的内容存到buffer对象时,从buffer对象的那个位置开始存,即新的内容添加到buffer中的起始位置。 length:读取文件的内容的长度,即添加到buffer中的内容的长度。 position:表示从文件的哪个地方开始读取文件的内容。 callbackerr,冷,nbf):回调函数,带三个参数: err——保存打开文件失败时的信息,如果文件打开成功则为null len-buffer的长度 nbf-buffer内容
示例:
var fs = require('fs'); fs.open('1.txt','r',function (err,fd) { if(err){ console.log('文件打开失败!'); }else{ //读取文件 var buf = new Buffer(20); //读取到的文件内容将存在这个buffer对象中 console.log(buf); //<Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00> fs.read(fd,buf,1,4,null,function (err1,len,nbf) { console.log(buf); //<Buffer 00 68 65 6c 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00> console.log(err1); //null console.log(len); //4 console.log(nbf); //<Buffer 00 68 65 6c 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00> }); } });
4. fs.readSync(fd,buffer,offset,length,position) , 从指定的文档标识开始同步的读取文件数据。
5.fs.write(fd,buffer,offset,length,position,callback) ,通过文件表示fd,向指定的文件写入buffer。
参数: fd:打开的文件。 buffer:要写入的数据。 offset:buffer对象中要写入的数据的起始位置。 length:要写入的buffer数据的长度。 position:fd中的起始位置。 callback(err,len,nbf):回调函数,带三个参数: err——保存打开文件失败时的信息,如果文件打开成功则为null len-写入buffer的长度 nbf-写入buffer内容
示例:
var fs = require('fs'); fs.open('1.txt','r+',function (err,fd) { if(err){ console.log('文件打开失败!'); } else{ var buf1 = new Buffer('how are you ?'); fs.write(fd,buf1, 0,buf1.length,25,function () { console.log(arguments); //{ '0': null, '1': 13, '2': <Buffer 68 6f 77 20 61 72 65 20 79 6f 75 20 3f> } }); } });
1.txt文件的内容变化:
6. fs.write(fd, data[,position[,encoding]], callback) ,通过指定的fd把data写入到文档中,如果data不是buffer对象,则会把值强制转化成一个字符串。
7. fs.writeSync(fd, buffer, offset, length[,position]) ,fs.write()的同步版本
8. fs.writeSync(fd, data[,position[,encoding]]) ,fs.write()的同步版本
9. fs.close(fd, callback) , 关闭一个打开的文件。
10. fs.closeSync(fd) ,fs.close()的同步版本。
示例:var fs = require('fs'); fs.open('1.txt','r+',function (err,fd) { if(err){ console.log('文件打开失败!'); } else{ fs.write(fd, 'I am fine , thanks .', 25); fs.close(fd,function () { //这里面可以重新打开文件再进行操作等 }); }
1.txt文件内容变化:
11.fs.writeFile(filename, data [,option], callback) ,异步的将数据写入一个文件,如果文件不存在就新建,如果文件原来已经存在,则会被替换,data可以是string,也可以是buffer。
callback(e):回调函数,带一个参数,表示保存文件写入的结果,成功时为null。12. fs.writeFileSync(filename, data, [,option]) ,fs.writeFie()的同步版本。
示例:异步写文件var fs = require('fs'); var filename = '2.txt'; //2.txt文件原来不存在 fs.writeFile(filename, 'hello', function () { console.log(arguments); //{ '0': null } });
13. fs.appendFile(filename, data, [,option], callback) ,异步的将数据添加到一个文件的末尾,如果文件不存在,会新建一个文件,data可以是string,也可以是buffer。
14. fs.appendFileSync(filename, data, [,option]) , fs.appendFile()的同步版本。
示例:var fs = require('fs'); var filename = '2.txt'; //2.txt文件在上一个演示例子中创建了 fs.appendFile(filename, ' world' ,function () { console.log(arguments); });
15. fs.exits(path, callbakc) ,检查指定路径的文件或者目录是否存在。
callback(e):回调函数,带一个参数,文件存在时为true,不存在时为false。186. fs.exitsSync(path) ,fs.exits()的同步版本。
示例:判断一个文件是否存在,存在时追加问价内容,不存在则创建。//异步模式 var fs = require('fs'); var filename = '2.txt'; fs.exists(filename,function (err) { //判断文件是否存在 console.log(err); //true表示存在,false表示不存在 if(!err){ //文件不存在 fs.writeFile(filename,'hello',function (e) { if(e){ console.log('创建文件出错了!'); }else{ console.log('创建文件成功!'); } }); }else{ //文件存在 fs.appendFile(filename, ' world',function (er) { if(er){ console.log('添加文件内容失败!'); }else{ console.log('添加文件内容成功!'); } }); } }); //同步模式 var fs = require('fs'); var filename = '3.txt'; if(!fs.existsSync(filename)){ fs.writeFileSync(filename,'hello'); console.log('新文件创建成功!'); }else{ fs.appendFileSync(filename, ' world'); console.log('追加文件内容成功!') }
17. fs.readFile(filename, [option], callback) ,异步读取一个文件的全部内容。
callback(err,data):回调函数,带2个参数,err表示是否读取到文件,成功时err为null,data表示读取的文件内容。18. fs.readFileSync(filename, [option]) ,fs.readFile()的同步版本。
示例:var fs = require('fs'); fs.readFile('2.txt', function (err,data) { console.log(arguments); if(err){ console.log('读文件内容失败!'); }else{ console.log(data.toString()); //输出读到的2.txt文件的内容 } });
19. fs.unlink(path, callback) ,删除一个文件。
callback(err),回调函数,带一个参数,err为null时表示成功删除,否则err保存删除失败的信息。20. fs,unlinkSync(path) , fs.unlink()的同步版本。
示例:fs d2c6 .unlink('1.txt', function (err) { if(err){ console.log('删除失败!'); }else{ console.log('删除成功!'); } console.log(err); //(删除成功!) null });
21. fs.rename(oldPath,newPath,callback) ,重命名文件。
callback(err),回调函数,带一个参数,成功重命名文件时,err为null。22. fs.renameSync(oldPath,newPath) ,fs.rename()的同步版本。
示例:fs.rename('2.txt','2.new.txt',function () { console.log(arguments); });
23. fs.stat(path, callback) ,读取文件信息。
24. fs.statSync(path,callback) ,fs.stat()的同步版本。
callback(err,stats):回调函数,成功时候,err为null,stats保存文件的属性信息。示例:
fs.stat('1.txt', function (err,stats) { console.log(err); console.log(stats); });
stats类中的方法有:
stats.isFile() 如果是文件返回 true,否则返回 false。 stats.isDirectory() 如果是目录返回 true,否则返回 false。 stats.isBlockDevice() 如果是块设备返回 true,否则返回 false。 stats.isCharacterDevice() 如果是字符设备返回 true,否则返回 false。 stats.isSymbolicLink() 如果是软链接返回 true,否则返回 false。 stats.isFIFO() 如果是FIFO,返回true,否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道。 stats.isSocket() 如果是 Socket 返回 true,否则返回 false。
25. fs.watch(filename, [option], [listener]) ,观察指定路径的改变,filename路径可以是文件也可以是目录。
示例:监听文件状态的变化var filename = '1.txt'; fs.watch(filename, function (ev,fn) { console.log(ev); if(fn){ //判断fn事件是否支持 console.log(fn + '发生了改变'); }else{ console.log('......'); } });
26. fs.mkdir(path,[mode],callback) ,创建一个文件夹。
27. fs.mkdirSync(path,[mode]) ,fs.mkdir()的同步版本。
28. fs.rmdir(path, callback) ,删除一个文件夹。
29. fs.rmdirSync(path) , fs.rmdir()的同步版本。
示例://创建文件夹 fs.mkdir('./1', function () { console.log(arguments); //{ '0': null } }); //删除文件夹 fs.rmdir('./2', function () { console.log(arguments); //{ '0': null } });
30. fs.readdir(path, callback) ,读取文件夹。
callback(err,fileList):回调函数,包含2个参数,成功读取到文件夹时,err为null,fileList是一个数组,保存读取到的文件夹下的所有文件和文件夹。31. fs.readSync(path) ,fs.read()的同步版本。
示例1:fs.readdir('../fs', function (err,fileList) { console.log(err); console.log(fileList); //fileList是一个数组,存储读取目录下的全部文件、文件夹 });
示例2:列出指定目录下的文件,并指出是文件还是文件夹等。
fs.readdir('../fs', function (err,fileList) { fileList.forEach(function (f) { fs.stat(f,function (err, info) { //console.log(arguments); switch (info.mode){ case 16822: console.log('[文件夹] ' + f); break; case 33206: console.log('[文件] ' + f); break; default: console.log('其它文件 ' + f); break; } }); }); });
ps:如若对本文还有任何的意见或建议,欢迎联系本人或留言。
相关文章推荐
- node.js 使用fs模块对系统文件及目录进行读写操作
- Node.js 之基于文件的模块系统
- Node.js:fs文件系统模块
- Node.js中文件操作模块File System的详细介绍
- Node.Js中核心模块之文件系统解析
- 浅谈Node.js:fs文件系统模块
- Node.js内置的文件系统模块(fs)
- node.js模块之fs文件系统
- node.js之基本文件系统模块fs
- Node.js基本模块 fs(是文件系统模块)
- node.js基于fs模块对系统文件及目录进行读写操作的方法详解
- Node.js:Web模块、文件系统
- Node.js 文件系统
- Node.js权威指南 (6) - 在Node.js中操作文件系统
- Node.js 文件系统
- Linux CentOS6系统安装最新版本Node.js环境及相关文件配置
- node.js认识学习二:__dirname获取当前模块文件所在目录的完整绝对路径
- 开始学习node.js了,第一节,fs文件系统 【fs.rename】重命名文件/文件夹
- Node.js 文件系统
- Node.js文件模块fs监视文件变化