Node.js中的文件系统的简要说明

在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('程序结束!');

猜你喜欢

转载自blog.csdn.net/Endl_1998/article/details/84260249