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

node.js基本模块学习(一) fs模块

2017-11-23 10:38 465 查看
什么是fs模块

Node.js内置的fs模块就是文件系统模块,复制读写文件。

和所有其他javascript模块不同,fs模块同时提供了异步和同步的方法。

         异步方法

因为javascript是单线程模型,执行io操作时候,javascript代码无需等待,javascript代码无需等待,而是传入回调函数后,继续执行后续javascript代码,就是说如果某个i/o操作需要等待服务器发送数据,但是javascript不会在这段代码上等待,而是会继续执行后续代码,比如jquery提供的getjson操作。

$.getJSON('http://example.com/ajax', function (data) {
console.log('IO结果返回后执行...');
});
console.log('不等待IO结果直接执行后续代码...');         同步的方法
同步的方法,要求javascript在代码上等待,耗时会长。

var data = getJSONSync('http://example.com/ajax');     

fs模块异步读取文件
      读取文本文件

'use strict';
var fs = require('fs');
fs.readFile('sample.txt', 'utf-8', function (err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
});sample.txt 在当前目录下,并且文件编码为utf-8
readFile是node.js标准的回调函数,第一参数err代表错误信息,第二个参数data代表结果

正常读取时候err为空,data为读取到的数据,发生错误时候err表示一个错误对象,data为undefined

if(err){ 表示出错} else{ 表示文件正常读取}

    读取二进制文件

读取二进制文件,不用传入文件编码,这时候data返回的就是一个Buffer对象,在node.js中Buffer对象就是一个

包含零个或者任意个字节的数组(和Array不一样)

Buffer对象转换为String

var text = data.toString("utf-8");

console.log(text);

String对象转为Buffer

var buffer = Buffer.from(text,'utf-8');

console.log(buffer);

fs模块同步读取文件

//同步读取文件
var data = fs.readFileSync('sample.txt','utf-8');
console.log(data);如果同步读取文件发生异常,则需要使用try{}catch(err){}捕获

fs模块写文件

      异步写入文件 

//异步写入文件
var writedata = 'hello,ni hao!';
fs.writeFile('output.txt',writedata,function(err){
if(err){
console.log(err);
}else{
console.log('write success');
}
});writeFile的参数分别为文件名,数据和回调函数。
如果传入的数据是string类型,就是按照utf-8编码写入文件文件,如果传入的数据类型是Buffer对象,就会写入二进制文件,文件不存在自动创建

回调函数只关心成功与否,err参数即可

    同步写入文件

//同步写入文件
var writedataSyn = 'hello world!';
fs.writeFileSync('output.txt','this a test data');

stat 获取文件创建时间,大小等信息
'use strict';

var fs = require('fs');

fs.stat('sample.txt', function (err, stat) {
if (err) {
console.log(err);
} else {
// 是否是文件:
console.log('isFile: ' + stat.isFile());
// 是否是目录:
console.log('isDirectory: ' + stat.isDirectory());
if (stat.isFile()) {
// 文件大小:
console.log('size: ' + stat.size);
// 创建时间, Date对象:
console.log('birth time: ' + stat.birthtime);
// 修改时间, Date对象:
console.log('modified time: ' + stat.mtime);
}
}
});stat()也有一个对应的同步函数statSync()

选择同步方法还是异步方法

NODE环境执行的javascript代码是服务器端代码,所以绝大部分在服务器运行期反复执行的代码,必须使用异步代码,否则,同步代码在执行期间,服务器将停止响应,因为javascript是单线程

但是服务器启动或者结束写入到状态文件可以使用同步方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  node.js fs模块学习