1.Node.js文件系统模块fs
fs是node.js的文件系统模块,负责node.js中文件的读写,同时支持同步和异步。
"use strict";
var fs = require("fs");
//异步读文件,正常读取时err为null,data为读取到的string
fs.readFile("sample.txt","utf-8",function (err,data) {
if (err){
console.log(err);
} else{
console.log(data + " Async" );
}
});
//同步读文件
try{
var data = fs.readFileSync("sample.txt","utf-8");
console.log(data + " sync");
}catch (e) {
console.log(e);
}
//异步写文件 fs.writeFile参数依次是文件名称,数据,回调函数
var data = "this is a node Asyncwrite";
fs.writeFile("sample.txt",data,function (err) {
if (err){
console.log(err);
} else{
console.log("Async write is ok ");
}
});
//同步写文件 fs.writeFile参数依次是文件名称,数据,回调函数
try{
var data = "this is a node syncwrite!";
fs.writeFileSync("sample.txt",data);
console.log("Sync write is ok");
}catch (e) {
console.log(e);
}
// stat.isFile() 是否是一个文件
// stat.isDirectory() 是否是一个目录
// stat.isBlockDevice() 是否是块设备
// stat.isCharacterDevice() 是否是字符设备
// stat.isSymbolicLink() (only valid with fs.lstat())是否是软链接
// stats.isFIFO() 是否是FIFO, FIFO是UNIX中的一种特殊类型的命令管道。
// stat.isSocket() 是否是一个socket
// stat.size() 文件大小
// stat.birthtime() 创建时间
// stat.mtime() 修改时间
//异步查看文件信息
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);
}
}
});
//同步查看文件信息
try{
var stat = fs.statSync('sample.txt');
// 是否是文件:
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);
}
}catch (e) {
console.log(e);
}
执行的结果如下
2.Node.js文件系统模块fs的api接口函数
// 异步写入文件
fs.writeFile('delete.txt','1234567890',function(err){
console('youxi!');
});
// 同步写入文件
fs.writeFileSync('delete.txt','1234567890');
// 异步读取文件
fs.readFile('delete.txt','1234567890',function(err){
console('youxi!');
});
// 同步读取文件
fs.readFileSync('delete.txt','1234567890');
// 删除文件
fs.unlink('delete.txt', function(){
console.log('success');
});
// 修改文件名称
fs.rename('delete.txt','anew.txt',function(err){
console.log('rename success');
// 查看文件状态
fs.stat('anew.txt', function(err, stat){
console.log(stat);
});
});
// 判断文件是否存在
fs.exists('a.txt', function( exists ){
console.log( exists );
});
// 将数据添加到文件末尾
fs.appendFile( filename, data, [optins], callback );
3.同步异步的使用判断
在fs文件读写模块中既提供了同步也提供了异步方法,在node.js中默认是异步的,所以我们看到同步方法一般是在异步方法的后面+Sync。那么我们什么时候使用异步什么时候使用同步方法呢?
由于node.js是服务端的代码,所以绝大部分是事件驱动型的重复执行的业务逻辑代码,必须使用异步代码。而比如服务器启动时需要读取的配置文件,结束时写入到文件的状态或者是信息时是可以用同步代码的,因为这些代码在服务端每次生命周期中只需要执行一次,是不会影响服务器正常运行时的其他异步执行代码。