Node.js学习(5)- 文件系统模块fs

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是服务端的代码,所以绝大部分是事件驱动型的重复执行的业务逻辑代码,必须使用异步代码。而比如服务器启动时需要读取的配置文件,结束时写入到文件的状态或者是信息时是可以用同步代码的,因为这些代码在服务端每次生命周期中只需要执行一次,是不会影响服务器正常运行时的其他异步执行代码。

猜你喜欢

转载自blog.csdn.net/sunhuansheng/article/details/82180474