在node.js中的有着文件系统fs这样一个自带的模块,
我们在使用它的时候只需引入即可:
var fs =require('fs');
在fs这个模块中有许多的文件操作API,在这里我只说几个我常见的API,
或者说我就是会这几个API,哈哈哈!!!
在这之前,我想说明一下,我这里只使用fs模块中的异步方法,
事实上,node.js文件系统模块中的方法均有异步和同步操作的版本;
异步的方法函数最后一个参数为回调函数,回调函数的第一个 参数是我们
知道的包含错误信息的error参数;
由于方法的性能更高,速度更快,而且没有阻塞,因此在一般情况下
我都是使用异步方法;
一:打开文件
其实一开始我也不理解为什么要 打开文件,但是我们可以这样理解,
在家里一般会有水桶吧,你要是想取水的话是不是要先打开桶盖,或者
你想往水桶里加水的时候,是不是也要打开水桶盖;
所以可以类比一下,打开文件就相当于打开桶盖应该就好理解;
说一下语法吧:
fs.open(path,flags[,model],callback)
参数的使用解释一下:
path-------------文件的路径
flags-------------文件打开的行为(例如:r,r+,w,w+等)
mode-----------设置文家模式,文件默认权限是0666(可读,可写)
callback--------回调函数,带有两个参数例如:callback(error,fd)
在这里我对callback回调函数的第二个参数做一下解释:
fd事实上就是一个文件描述符,那什么是文件描述符呢,
就是一个代表这个文件的一个编号吧,通过这个编号的操作就代表对这个文件操作;
我就是这样理解的;
//引入文件模块
var fs = require("fs");
// 异步打开文件
console.log("准备打开input.txt文件!");
//打开文件的方式为:以读写方式打开文件,如果文件不存在,则抛出异常;
fs.open('input.txt', 'r+', function(err, fd) {
if (err) {
return console.error(err);
}
console.log("文件打开成功!");
});
二:写入文件
就是把已有的数据写入到文件中;
语法如下:
fs.writeFile(file,data[,options],callback)
注意 :writeFile直接打开文件默认是 w模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件的 内容 ;
参数如下:
file---------------文件名或者文件描述符(fd)
data-------------要写入文件的数据,可以是String(字符串)或Buffer(缓冲 )对象;
options----------该参数是一个对象,包含{encoding ,mode ,flag};默认编码为utf8,模式为0666,flag为:w;
callback---------回调函数,回调函数只包含错误信息参数error,在写入失败时返回;
var fs=require('fs');
//再写入文件的时候默认是w方式写入的,即文件不存在即创建
fs.writeFile('input.txt','安徽的天气一点不冷,很舒服的~~~!',function(error){
if(error){
console.log(error);
}
//读取刚刚写入的数据文件
fs.readFile('input.txt',function(error,data){
if(error){
console.log(error);
}
console.log('读取的数据为:'+data.toString());
});
});
console.log('程序结束!');
上述代码中:
file是input.txt; data是一个String; 使用默认的options; 还有一个参数为error的回调函数;
三:读取文件
语法:
fs.read(fd,bufffer,offset,length,position,callback)
注意这个方法与 readFile方法的区别;
readFile只是简单的从一个文件中读取数据,然后通过回调函数把数据返回 ;
而read方法则可以控制读取的字节数,以及其实读取的位置来操作流式文件
四:关闭文件
语法:
fs.close(fd,callback)
该方法使用了文件描述符来读取文件;
参数:
fd-----------------通过fs.open()方法返回的文件描述符;
callback---------回调函数 ,没有参数 ;
以下是结合以上几个API写成的综合的程序:
/**
* fs.read(fd,buffer,offset,length,position,callback);
* 注意:该方法使用了文件描述符来读取文件;
*
* 参数:
* fd------------通过fs.open()方法返回的文件描述符;
* buffer--------数据写入的缓冲区;
* offset--------缓冲区写入的写入偏移量;
* length--------要从文件读取的字节数;
* position------文件读取的起始位置,如果position的值为null,则会
* 当前文件指针的位置读取;
* callback------回调函数,有三个参数error,bytesRead,buffer,
* (1):error为错误信息;
* (2):byteRead表示从缓冲区buffer中读取的字节数;
* (3):buffer为缓冲区对象;
*
*/
var fs=require('fs');
var buf=new Buffer.alloc(1024);
console.log('准备打开文件!');
fs.open('input.txt','r+',function(error,fd){
if(error){
console.log(error);
}
console.log('文件打开成功!');
console.log('准备读取文件');
console.log(buf.length);//打印的结束应该是input.txt文件中的字节数,就是说要读取所有文件;
fs.read(fd,buf,0,buf.length,0,function(error,bytesRead,buffer){
if(error){
console.log(error);
}
console.log('读取数据的字节数如下:'+bytesRead.toString());
//仅输出读取的字节
if(bytesRead>0){
console.log(buf.slice(0,bytesRead).toString());
}
//console.log(buffer.toString());
});
fs.close(fd,function(error){
if(error){
console.log(error);
}
console.log('文件关闭成功 !');
});
});
//console.log('程序结束!');