Node.js - fs模块笔记

简介

  • 大部分方法都是异步方法。方法后面带Sync的为同步方法。比如:writeFileSyncappendFileSync

  • 引入 fs

// fs 是 node.js 的核心模块。不用下载安装,可以直接引入 var fs = require('fs');

fs.stat 检测是文件还是目录

目录、文件是否存在

stats类中的方法

  • stats.isFile():是否是文件
  • stats.isDirectory():是否是目录
  • stats.isBlockDevice():是否是块设备
  • stats.isCharacterDevice():是否是字符设备
  • stats.isSymbolicLink():是否是软连接
  • stats.isFIFO():是否是FIFOFIFOUNIX中的一种特殊类型的命令管道
  • stats.isSocket():是否是 Socket
// 检测是文件还是目录 // fs.statSync()同步获取stats对象,通过返回值接收 fs.stat('html', function(error, stats) { if (error) { console.log(error) return false } console.log('文件:' + stats.isFile()) console.log('目录:' + stats.isDirectory()) })

fs.mkdir 创建目录

创建之前先判断是否存在

fs.mkdir('css', function(error) { if (error) { console.log(error) return false } console.log('创建目录成功') })

fs.readdir 读取目录

读取目录下第一级内容 把目录下面的文件和文件夹都获取到

fs.readdir('html', function(error, data) { if (error) { console.log(error) return false } // data是数组类型,包含文件夹以及文件的名字(只有第一级目录内容) // 拿到一个文件夹下面的所有目录 console.log(data) })

fs.rmdir 删除目录

该方法只能删除目录,不能删除文件

fs.rmdir('abc目录', function(error) { if (error) { console.log(error) return false } console.log('删除目录成功') })

fs.open 打开文件

  • fs.open(path, flags[, mode], callback)

flags参数

  • r:以读取模式打开文件。如果文件不存在抛出异常。
  • r+:以读写模式打开文件。如果文件不存在抛出异常。
  • rs:以同步的方式读取文件。
  • rs+:以同步的方式读取和写入文件。
  • w:以写入模式打开文件,如果文件不存在则创建。
  • wx:类似 w,但是如果文件路径存在,则文件写入失败。
  • w+:以读写模式打开文件,如果文件不存在则创建。
  • wx+:类似 w+, 但是如果文件路径存在,则文件读写失败。
  • a:以追加模式打开文件,如果文件不存在则创建。
  • ax:类似 a, 但是如果文件路径存在,则文件追加失败。
  • a+:以读取追加模式打开文件,如果文件不存在则创建。
  • ax+:类似 a+, 但是如果文件路径存在,则文件读取追加失败。
fs.open('input.txt', 'r+', function(error, fd) { if (error) { console.log(error) return false } console.log('文件打开成功!') })

fs.read 读取文件

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

参数说明

  • fd:通过 fs.open() 方法返回的文件描述符
  • buffer:数据写入的缓冲区
  • offset:缓冲区写入的写入偏移量
  • length:要从文件中读取的字节数
  • position:文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取
  • callback:回调函数,有三个参数err, bytesRead, buffererr 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象
var buf = new Buffer.alloc(1024) fs.open('input.txt', 'r+', function(error, fd) { if (error) { console.log(error) return false } console.log('文件打开成功!') console.log('准备读取文件:') fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) { if (err) { console.log(err) return false } console.log(bytes + ' 字节被读取') // 仅输出读取的字节 if (bytes > 0) { console.log(buf.silce(0, bytes).toString()) } }) })

fs.close 关闭文件

  • fs.close(fd, callback)
var buf = new Buffer.alloc(1024) fs.open('input.txt', 'r+', function(error, fd) { if (error) { console.log(error) return false } console.log('文件打开成功!') console.log('准备读取文件:') fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) { if (err) { console.log(err) return false } console.log(bytes + ' 字节被读取') // 仅输出读取的字节 if (bytes > 0) { console.log(buf.silce(0, bytes).toString()) } // 关闭文件 fs.close(fd, function(err) { if (err) { console.log(err) return false } console.log('文件关闭成功') }) }) })

fs.writeFile 写入文件

  • writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。
  • 文件不存在就创建,但不能创建目录
// 写入文件 // 会覆盖之前的内容 // 文件不存在就创建 // utf8参数可以省略 fs.writeFile('123.txt', '你好 node.js', 'utf8', function(error) { if (error) { console.log(error) return false } console.log('写入成功') })

fs.appendFile 写入追加文件

fs.appendFile('123.txt', '这是写入的内容\n', function(error) { if (error) { console.log(error) return false } console.log('追加写入成功') })

fs.readFile 读取文件

fs.readFile('123.txt', function(error, data) { if (error) { console.log(error) return false } // data是读取的十六进制数据 // 也可以在参数中加入格式编码 utf8 来解决十六进制的问题 // console.log(data) // 读取出所有行的信息 console.log(data.toString()) })

fs.unlink 删除文件

fs.unlink('index.txt', function(error) { if (error) { console.log(error) return false } console.log('删除文件成功') })

fs.rename 重命名

重命名 或者 剪切文件(移动)

fs.rename('html/index.html', 'html/news.html', function(error) { if (error) { console.log(error) return false } console.log('修改名字成功') })

fs.access 判断目录、文件是否存在读写权限

fs.access('package.json', function(error) { console.log(error ? '目录/文件不存在' : '文件存在,可以进行读写') })

fs.createWriteStream 写入文件流

var data = '我是从数据库中获取的数据,我要保存起来' var writeStream = fs.createWriteStream('output.txt') writeStream.write(data, 'UTF8') // 标记文件末尾,结束写入流,释放资源 writeStream.end() writeStream.on('finish', function() { console.log('写入完成') }) writeStream.on('error', function() { console.log(error.stack) }) console.log('程序执行完毕')

pipe 管道流

var readStream = fs.createReadStream('input.txt') var writeStream = fs.createWriteStream('output.txt') readStream.pipe(writeStream) console.log('程序执行完毕')

创作不易,若本文对你有帮助,欢迎打赏支持作者!

 分享给好友: