node.js 之 fs 操作

node.js 之 fs 文件操作

本文主要是 讲述 用node.js实现读写操作 、其他的文件操作不做过多的讲述

参考链接


同步和异步

Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()

注意: 回调函数的参数 错误优先

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。但是使用异步或者同步方法,看你个人业务需求来定。


一、fs.readFile() 异步方法

创建一个 text.txt 文件然后 内容自定义

在 text.txt 同级别目录下创建 file.js

file.js 内容如下

	const fs = require('fs')

	fs.readFile('text.txt', function (err, data) {
		if (err) {
			return console.error(err)
		}
		console.log('异步读取:' + data.toString())
	})

运行 file.js 文件 node ./file.js ./file.js 这个路径是看你当前的终端的位置来的 并不是固定的

二、fs.readFileSync() 同步方法

在 text.txt 文件目录下新建 fileSync.js

	const fs = require('fs')

	const data = fs.readFileSync('text.txt')
	console.log('同步读取: '+ data.toString())
	

三、 fs.open 和 fs.close 以及 fs.read

下面这个例子会用到这三个东西 所以 简单介绍一下 都是 异步状态下

  1. fs.open 打开文件

    语法格式 fs.open(path, flags[, mode], callback)
    path - 文件的路径。
    flags - 文件打开的行为。具体值详见下文。
    mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
    callback - 回调函数,带有两个参数如:callback(err, fd)。

  2. fs.close 关闭文件

语法格式 fs.close(fd, callback)
fd - 通过 fs.open() 方法返回的文件描述符。
callback - 回调函数,没有参数。

  1. fs.read 异步模式下读取文件

语法格式 fs.read(fd, buffer, offset, length, position, callback)
fd - 通过 fs.open() 方法返回的文件描述符
buffer - 数据写入的缓冲区
offset - 缓冲区写入的写入偏移量
length - 要从文件中读取的字节数
position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取
callback - 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象

接下来我们创建 file.js 文件,代码如下所示:

const fs = require('fs')

const buf = new Buffer.alloc(1024)

console.log('准备打开文件');

// 异步
// r+   是以读写模式打开文件。如果文件不存在抛出异常  ----> 读写  会抛出异常
fs.open('text.txt', 'r+', function (err, fd) {
  if (err) {
    return console.error(err);
  }
  console.log('文件打开成功');

  console.log('准备读取文件');

  fs.read(fd, buf, 0, buf.length, 0, function (err, bytes) {
    if (err) {
      return console.error('读取文件失败:' + err);
    }

    // 仅输出读取的字节
    if (bytes > 0) {
      console.log(buf.slice(0, bytes).toString());
    }

    // 关闭文件
    fs.close(fd, function (err) {
      if (err) {
        console.log('关闭文件失败:' + err);
      }
      console.log('文件关闭成功');
    })
  })
})

console.log('你先我先');

四、写入文件

异步写入文件

创建 dev.js

const fs = require('fs')
console.log(1);

// 异步写入

 fs.readFile('dev.js', function (err, data) {
   if (err) {
     return console.error('读取文件失败:' + err);
   }
   fs.writeFile('index.js', data.toString(), function (err) {
     if (err) {
       return console.error('写入文件失败:' + err);
     }
   })
   console.log(12);
 })

console.log(123);

const config = require('./index.js')

console.log(config.NODE_ENV, 'config.js');

同步写入

const fs = require('fs')
console.log(1);
//  同步写入
const data = fs.readFileSync('dev.js')
fs.writeFileSync('index.js', data.toString(), function (err) {
  if (err) {
    console.log('12-1');
    return console.error(err);
  }
  console.log(12);
})
console.log(123);

const config = require('./index.js')

console.log(config.NODE_ENV, 'config.js');

五、删除文件

语法 fs.unlink(path, callback)
path: 路径
callback: 回调, 没有参数

	const fs = require('fs')
	// 假设 当前js 文件同级别中 有一个 input.txt 文件
	fs.unlink('input.txt', function(err){
		if (err) {
			alter('失败咯')
		}
	})

六、创建目录

语法 fs.mkdir(path, options, callback)
path: 路径
options: 配置项
callback: 回调

options 可以有两个参数

recursive: 是否以递归的方式创建目录 默认为 false
mode 目录权限 默认为 0777

recursive: true 当你没有这个文件夹的时候也会创建

	const fs = require('fs')
	// 假设 当前js 文件同级别中 有一个 input.txt 文件
	fs.mkdir('input', function(err){
		if (err) {
			alter('失败咯')
		}
	})

	fs.mkdir('file/mkdir', { recursive: true }, function(err){
		if (err) {
			alter('失败咯')
		}
	})

七、读取目录

语法 fs.readdir(path, callback)
path: 路径
callback: 回调 参数 err, fileNameArray

fileNameArray: 是子级目录的数组

	const fs = require('fs')
	fs.readdir('file', function(err, fileNameArray){
		if (err) {
			alter('失败咯')
		} else {
			console.log(fileNameArray)
			// file 这个文件夹下面的 子文件名称(不包含 file/files/...)
		}
	})


八、删除目录

语法 fs.rmdir(path, callback)

这个删除 我相信你看了语法就已经 会了 例子省略

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值