您的位置:首页 > Web前端 > Node.js

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:如若对本文还有任何的意见或建议,欢迎联系本人或留言。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: