Node.js 文件系统

Node.js 文件系统

参考https://www.runoob.com/nodejs/nodejs-fs.html
Node.js提供一组类似UNIX(POSIX)标准的文件操作API。

  var fs = require('fs');

异步和同步

  • fs模块中的方法均有异步同步两个版本,例如读取文件有fs.readFile()和fs.readFileSync();
  • 异步方法的最后一个参数为回调函数,回调函数的第一个参数为错误信息err;
  • 推荐使用异步方法,性能更高,速度更快,且无阻塞。
var fs = require('fs');

// 异步读取
fs.readFile('input.txt', (err, data)=>{
	if(err){
		console.error(err);
		return;
	}
	console.log('异步读取:'+data.toString());
});

// 同步读取
var data = fs.readFileSync('input.txt');
console.log('同步读取:'+data.toString());

console.log('程序执行结束');

结果:

  同步读取:菜鸟教程官网地址:www.runoob.com
  文件读取实例
  程序执行结束
  异步读取:菜鸟教程官网地址:www.runoob.com
  文件读取实例

打开文件

  fs.open(path, flags[, mode], callback)
  • path:文件路径
  • flags:文件打开方式,和python类似
  • mode:设置文件权限,默认为0666(可读可写)
  • callback:回调函数,带两个参数(err, fd)

flags参数

  • r:只读,不存在则抛异常
  • r+:读写,不存在则抛异常
  • rs:同步读
  • rs+:同步读写
  • w:写,不存在则创建
  • wx:创建并写,如果已存在则写失败
  • w+:读写,不存在则创建
  • wx+:读写,如果已存在则读写失败
  • a:追加模式打开,不存在则创建
  • ax:追加模式打开,如果已存在则追加失败
  • a+:读取追加模式打开,不存在则创建
  • ax+:读取追加模式打开,如果已存在则读取追加失败

r写,w读,+赋予额外的读或写权限,a追加,x已存在则失败,不带x读不存在则抛异常,不带x写不存在则抛异常

获取文件信息

  fs.stat(path, callback)
  • path:文件路径
  • callback:回调函数,带两个参数(err, stats),stats是fs.Stats对象
    fs.stats(path)执行后,会返回fs.Stats对象,通过该对象的方法判断文件的相关属性,例如判断是否为文件:
var fs = require('fs');


fs.stat('./input.txt',(err, stats)=>{
	console.log(stats.isFile());
});


console.log('程序执行结束');

结果:

  程序执行结束
  true

第一次执行的时候提示说:

  console.log(stat.isFile());
                ^
  ReferenceError: stat is not defined

后来还去查了下文档,发现没写错,后来莫名其妙就可以了……而且我的是v14.15.2。

stats类中的方法

var fs = require('fs');


console.log('准备打开文件!');
fs.stat('input.txt', (err, stats)=>{
	if(err){
		return console.log(err);
	}
	console.log(stats);
	console.log('读取文件信息成功!');
});

console.log('程序执行结束');

结果:

  准备打开文件!
  程序执行结束
  Stats {
    dev: 3127162932,
    mode: 33206,
    nlink: 1,
    uid: 0,
    gid: 0,
    rdev: 0,
    blksize: 4096,
    ino: 2533274790624099,
    size: 60,
    blocks: 0,
    atimeMs: 1609120186409.6863,
    mtimeMs: 1609120186409.6863,
    ctimeMs: 1609120186409.6863,
    birthtimeMs: 1609120178188.6562,
    atime: 2020-12-28T01:49:46.410Z,
    mtime: 2020-12-28T01:49:46.410Z,
    ctime: 2020-12-28T01:49:46.410Z,
    birthtime: 2020-12-28T01:49:38.189Z
  }
  读取文件信息成功!

写入文件

异步写入文件

  fs.writeFile(file, data[, options], callback)
  • file:文件或文件描述符
  • data:待写入数据,String或Buffer对象
  • options:{encoding, mode, flag},默认为
  • callback:回调函数,带有参数err,写入失败时返回

读取文件

异步读取

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

使用文件描述符fd来读取文件。

  • fd:通过fs.open()返回的文件描述符
  • buffer:数据写入的缓冲区
  • offset:数据缓冲区写入的写入偏移量
  • length:要从文件中读取的字节数
  • position:读取的起始位置,如果为null则从当前文件指针处
  • callback:回调函数,带三个参数(err, bytesRead, buffer)

关闭文件

  fs.close(fd, callback)

使用文件描述符关闭文件

  • fd:通过fs.open()返回的文件描述符
  • callback:回调函数,没有参数

截取文件

异步截取文件

  fs.ftruncate(fd, len, callback)

使用文件描述符来截取文件

  • fd:通过fs.open()返回的文件描述符
  • len:文件内容的长度
  • callback:回调函数,没有参数
    在callback中对截取后的文件进行fs.read()、fs.write()、fs.close()等操作

删除文件

  fs.unlink(path, callback)
  • path:文件路径
  • callback:回调函数,没有参数

创建目录

  fs.mkdir(path, [, options], callback)
  • path:目录路径
  • options:{recursive, mode},recursive,递归创建(父级目录不存在则创建),默认为false;mode,设置目录权限,默认为0777
  • callback:回调函数,没有参数

读取目录

  fs.readdir(path, callback)
  • path:目录路径
  • callback:回调函数,带两个参数(err, files),files为文件数组列表

删除目录

异步删除目录

  fs.rmdir(path, callback)
  • path:目录路径
  • callback:回调函数,没有参数

总结

fs中的方法一般都有同步和异步两种,异步的最后一个参数通常是一个回调函数,该回调函数的参数可能有若干个或没有;
fs.read()和fs.write()功能类似fs.readFile()和fs.writeFile(),不过提供了更底层的操作,而且是对通过fs.open()得到的文件描述符进行操作。

posted @ 2020-12-28 11:16  pangqianjin  阅读(106)  评论(0编辑  收藏  举报