Node.js初识fs模块-创新互联

fs 模块是文件操作的封装,它提供了文件的读取、写入、更名、删除、遍历目录、链接等 Unix 文件系统操作。与其他模块不同的是,fs 模块中所有的操作都提供了 同步异步 两个版本,比如读取文件内容的函数有 异步的 fs.readFile() 和 同步的 fs.readFileSync().

成都创新互联是一家专注于成都网站建设、网站建设与策划设计,桂阳网站建设哪家好?成都创新互联做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:桂阳等地区。桂阳做网站价格咨询:13518219792

Node.js 导入文件系统模块的语法如下:

var fs = require('fs');

1、异步和同步读取文件

fs.readFile(file[, options], callback(err,data))

异步读取文件的全部内容

参数:

file:   |  | ,要读取的文件名,必选参数

options:   | , 可选参数,可指定 flag(文件操作选项,如 r+ 读写;w+读写,文 件不存在则创建)及 encoding 属性

        encoding:   | ,表示文件的字符编码

        flag:  ,默认 'r'

callback: ,回调函数提供了两个参数 err 和 data,err 表示有没有错误发生,data 是文件内容

如果指定了第二个参数 encoding,回调函数中的 data 是一个解析后的字符串,否则 data 将会是以 Buffer 形式表示的二进制数据

新建一个 content.txt,里面添加一行简单的文本

你好,世界!

异步读取文件,示例代码如下:

var fs = require('fs');

fs.readFile('./content.txt', {flag: 'r+', encoding: 'utf8'}, function(err, data){
    if(err){
        console.error(err);
        return;
    }
    console.log('异步读取:'+ data);
});

运行结果如下:

Node.js 初识 fs 模块

当读取文件出现错误时,err 将会是 Error 对象。例如:读取一个不存在的 content1.txt 文件,运行代码时,会报如下错误。

Node.js 初识 fs 模块

Node.js 的异步编程接口习惯是以函数的最后一个参数为回调函数,通常一个函数只有一个回调函数。回调函数的实际参数中第一个是 err,其余参数是其他返回内容。如果没有发生错误,err 的值会是 null 或 undefined。如果有错误发生,err 通常是 Error 对象的实例

fs.readFileSync(file[, options])

 fs.readFile 的同步版本,返回文件的内容

它接受的参数和 fs.readFile 相同,而读取到的文件内容会以函数返回值的形式返回。如果有错误发生,fs 将会抛出异常,需要使用 try 和 catch 捕捉并处理异常。

与同步 I/O 函数不同,Node.js 中异步函数大多没有返回值

同步读取文件示例:

var fs = require('fs');

//同步读取
var data = fs.readFileSync('./content.txt','utf8');
console.log('同步读取:'+ data);
console.log('程序执行完毕!');

运行结果:

Node.js 初识 fs 模块

2、获取文件信息

fs.stat(path, callback)

通过异步模式获取文件信息

参数:

path:  | ,文件的路径

callback: ,回调函数,带有两个参数 err 和 status,stats 是  fs.Stats  对象

fs.stat() 执行后,会将 stats 类的实例返回给其回掉函数。可以通过 stats 类中提供的方法判断文件的相关属性,例如:判断是否为文件夹

var fs = require('fs');

fs.stat('/Users/liuht/code/itbilu/demo/fs.js', function (err, stats) {
    console.log(stats.isFile());      //true
})

stats 类中的方法有:

Node.js 初识 fs 模块

新建一个 js 文件,代码如下:

var fs = require('fs');

console.log('准备打开文件!');

fs.stat('./content.txt', function(err, stats){
    if(err){
        console.err(error);
    }
    console.log(stats);
    console.log('读取信息成功!');

    //检测文件类型
    console.log('是否为文件(isFile)?'+ stats.isFile());
    console.log('是否为目录(isDirectory)?'+ stats.isDirectory());
})

运行结果:

Node.js 初识 fs 模块

3、写入文件

fs.writeFile(file, data[, options], callback)

异步的方式把数据写入文件,如果文件存在,该方法写入的内容会覆盖旧的文件内容

参数:

file:   |  | ,要读取的文件名,必选参数

data:   |  ,要写入的数据,可以是    也可以是   (对象流)

options:   | 

        encoding:   | ,表示文件的字符编码,默认'utf8'

    mode:  ,权限,默认 0o666

        flag:   ,默认 'w'

callback: ,回调函数只包含错误信息参数(err),在写入失败时返回

如果 data 是一个  ,那么 option 中的 encoding 会被忽略掉,将默认为 'utf8'

示例代码:

var fs = require('fs');

console.log('准备写入文件!');

fs.writeFile('./content.txt', '我是异步写入的文件内容', function(err){
    if(err){
        console.err(error);
    }
    console.log('数据写入成功!');
    console.log('--------------我是分割线---------------');
    console.log('读取写入的数据!');
    fs.readFile('./content.txt', function(err, data){
        if(err){
            console.err(error);
        }
        console.log('异步读取文件数据:' +data);

    })
})

运行结果:

Node.js 初识 fs 模块

同时,原来的 content.txt 中的内容变为:

Node.js 初识 fs 模块

fs.appendFile(file, data[, options], callback)

以追加的方式写入文件

示例代码:

var fs = require('fs');

fs.appendFile('./content.txt', '我是被追加写入的数据', function(err){
    if(err){
        console.log(error);
    }
});

fs.readFile('./content.txt', function(err, data){
    if(err){
        console.log(error);
    }
    console.log('异步读取文件数据:' +data);
})

运行结果:(在原数据后追加数据,不会覆盖原内容)

Node.js 初识 fs 模块

4、读取文件

fs.read(fd, buffer, offset, length, position, callback(err, bytesRead, buffer))

从指定的文件描述符 fd 中读取数据并写入 buffer 指向的缓冲区对象

参数:

fd :  ,使用 fs.open 打开成功后返回的文件描述符

buffer :  |  ,一个 buffer 对象,V8引擎分配的一段内存

offset :  ,整数,向缓存区中写入时的初识位置,以字节为单位

length :  ,整数,读取文件的长度

position :  ,整数,读取文件的初识位置;文件大小以字节为单位

如果 position  为 null,将从当前文件指针的位置读取

callback :  ,读取执行完成后的回调函数,有三个参数 err, bytesRead, buffer

     - err:错误信息

    - bytesRead:表示读取的字节数

    - buffer:缓冲区对象

示例代码如下:

var fs = require('fs');

var buf = new Buffer(1024);

console.log('准备打开已存在的文件!');
fs.open('./content.txt', 'r+', function(err, fd){
    if(err){
        console.error(err);
    }
    console.log('文件打开成功!');
    console.log('准备读取文件:');
    fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
        if(err){
            console.error(err);
        }
        //每一个汉字utf8编码是3个字节
        console.log(bytes+ '字节被读取');

        //仅输出读取的字节
        if(bytes >0){
            console.log(buf.slice(0, bytes));
        }
    })
});

运行结果:

Node.js 初识 fs 模块

5、打开文件

fs.open(path, flags[, mode], callback(err, fd))

异步的方式打开文件

path:  | ,文件的路径

flags:  | ,文件打开的行为,具体参考下表

mode: ,设置文件模式(权限),文件创建默认权限为 0666(可读,可写)

callback: ,回调函数,带有两个参数 err 和 fd

flags 参数可以是以下值:

Node.js 初识 fs 模块

示例代码:以读写模式打开文件 content.txt

var fs = require('fs');

//异步打开文件
console.log('准备打开文件!');
fs.open('./content.txt','r+',function(err, fd){
    if(err){
        return console.error(err);
    }
    console.log('文件打开成功!');
});

运行结果:

Node.js 初识 fs 模块

fs.openSync(path, flags[, mode])

 fs.open() 的同步版本,返回一个   代表读取的文件

6、创建目录

fs.mkdir(path[, mode], callback(err))

创建目录

参数:

path :  |  ,被创建目录的完整路径及目录名

[mode] :  ,整数,目录权限,默认 0777

callback :  ,创建完目录回调函数,err 错误对象

示例代码:

var fs = require('fs');

console.log('创建目录 /src/test');

fs.mkdir('src/test', function(err){
    if(err){
        console.error(err);
    }
    console.log('目录创建成功!');
});

创建前截图:

Node.js 初识 fs 模块

创建后截图:

Node.js 初识 fs 模块

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页题目:Node.js初识fs模块-创新互联
新闻来源:http://cdiso.cn/article/dhjoed.html