Node核心模块之fs模块

一、同步与异步

文件I/O是NodeJS的核心模块之一,主要岁文件进行读写操作。fs对文件的加载分为两种:同步和异步

  • 同步方式:执行完当前操作并返回结果后,才能继续执行后续代码
var fs = require('fs');
fs.unlinkSync('/targetUrl');
  • 异步方式:采用回调函数的方式,接收返回结果,可以立即执行后续的代码;回调函数的第一个参数是异常参数,如果方法成功执行,那么这个参数为“null”局欧哲“undefined”
var fs require('fs');
fs.unlink('/targetUrl',function(err) {
    if(err) {
        throw err;
    }
});
  • 异步与同步加载的对比
var fs = require('fs');
fs.readFile('test.txt','utf-8',function(err,data) {
    if(err) {
        throw err;
    } else {
       console.log(data); 
    }
});
console.log('异步加载');

运行结果为: 异步加载
data of test.txt

如果是同步执行,那么执行结果的顺序应该是相反的。

二、读写文件

1.eadFile读取文件

fs.readFile(fileName[,options],callback);

fileName为要读取的文件名称;
options是可选参数,是一个对象格式,用于指定文件编码(encoding)和操作方式(flag,例如:r代表读取文件,w代表写入文件,a代表追加文件)

fs.readFile('/test.txt','utf-8',function(err,data) {
    //或者{encoding:'utf-8'}
    if(err) {
        console.log(err);
    }
    console.log(data);
});

2.writeFile写入文件
writeFile与readFile差不多,语法规则为

fs.writeFile(fileName,data[,options],callback);

其中,data为写入文件的数据内容,callback为写入后的回调函数。

以追加的方式写入文件
fs.writeFile('/rest.txt','data add to file',{'flag': 'a'},function(err) {
    if(err) {
        console.log(new Error('error'));
    }
});

对写入的文件进行读取

fs.readFile('/test.txt','utf-8',function(err,data) {
    if(err) {
        console.log(new Error('read err'));
    }
    console.log(data);
});

3.read和write读写文件
除了使用readFile和writeFile读写文件之外,还可以使用read和write来对文件进行读写操作。

  • 打开文件 fs.open()
fs.open(path,flag[,mode],callback)

path是文件路径;
flags是打开文件的方式;可以是:
r:只读方式打开文档
r+:读写方式打开文档
rs:同步模式下,以只读方式打开文档

mode:文件权限(该文件已经存在的条件下),默认值为“0666”,即有可读写功能。

  • 关闭文件 fs.close()
fs.close(fd[,callback])

fd为所打开文件的描述符

  • 读取文件 fs.read()
fs.read(fd,buffer,offset,length,position,callback)

fd:文件描述符,必须接收fs.open()方法中的回调函数所返回的第二个参数;
buffer:存放读取到的数据的Buffer对象;
offset:指定向buffer中存放数据的起始位置;
length:指定读取文件的字节数;
position:指定在文件中读取内容的起始位置;
callback:回调函数

fs.open('/test.txt','r'.function(err,fd) {
    if(err) {
        throw err;
    }
    var buffer = new Buffer(255);
    //读取文件
    fs.read(fd,buffer,0,10,0,function(err,byteRead,buffer) {
        if(err) {
            throw err;
        }
        console.log(byteRead,buffer.slice(0,byteRead).toString());
        fs.close(fd);    //关闭文件
    });
});

callback回调函数的参数:
err:异常
byteRead:是从文件中读取内容的实际字节数;
buffer:被读取的缓存区对象;

  • 写入文件 fs.write()
fs.write(fd,buffer,offset,length,position,callback);

基本参数与read()函数差不多,其中,buffer为要写进文件的内容

fs.open('/test.txt','r'.function(err,fd) {
    if(err) {
        throw err;
    }
    var buffer = new Buffer('the information add into file');
    //读取文件
    fs.write(fd,buffer,0,10,0,function(err,byteRead,buffer) {
        if(err) {
            throw err;
        }
        console.log(byteRead,buffer.slice(0,byteRead).toString());
        fs.close(fd);    //关闭文件
    });
});
  • 追加写入 fs.appendFile()
fs.appendFile('test.txt','data to addto file',function(err) {
    if(err) {
        throw err;
    }
});

参考文章:汇智网-Node.js入门

你可能感兴趣的:(javascript,node)