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模块就是文件系统模块,复制读写文件。
和所有其他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基本模块学习(二)
- Node.js的基本模块学习(三)
- node.js基本模块学习(二) stream
- Node.js学习——基本模块之fs
- Node.js的基本模块学习(一)
- Node.js中的模块机制学习笔记
- Node.js学习笔记【1】入门(服务器JS、函数式编程、阻塞与非阻塞、回调、事件、内部和外部模块)
- 【node.js学习】--(2)--模块
- node.js学习笔记5——核心模块1
- Node.js学习笔记2【核心模块】
- 详解从Node.js的child_process模块来学习父子进程之间的通信
- Node.js基本模块 fs(是文件系统模块)
- Node.js基本模块crypto(加解密)
- node.js之基本http处理模块
- node.js学习笔记之模块调用
- Node.js学习之内置模块fs
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
- node.js学习(十五、Events事件模块)
- node.js学习(十六、DNS模块)
- NODE.JS学习笔记——CRYPTO 加密模块