Node fs模块一览
所有的文件系统操作都有异步和同步两种形式,只介绍异步方法。
异步形式的最后一个参数都是完成时回调函数。 传给回调函数的参数取决于具体方法,但回调函数的第一个参数都会保留给异常。 如果操作成功完成,则第一个参数会是 null 或 undefined。
fs模块常用方法一览
fs.open()
fs.close()
fs.readFile()
fs.writeFile()
fs.read()
fs.readdir()
fs.mkdir()
fs.rmdir()
fs.Stats 类
fs.WriteStrame 类
fs.ReadStream 类
fs Promise API 需要node v10.0.0
版本才支持。
1. 文件路径
支持
- 字符串
- Buffer
- 使用
file:
协议的URL对象const url = reuqire('url') fs.readFile(new url.URL('file:///tmp/hello'))
2. fs.open
- path
String|Buffer|URL
- flags
String|Number
- r+ 读写,如果文件不存在则抛出异常
- r 只读
- w 只写,如果文件不存在则创建
- w+ 读写,文件不存在则创建
- a+ 读取追加,文件不存在则创建
- mode
integer 0666
- callback
- err
Error
- fd
integer
close时传递
- err
fs.open
会分配一个新的文件描述符, 一旦分配了,文件描述符可用于读取数据、写入数据、或查看文件信息。大多数操作系统会限制打开的文件描述符的数量,所以当操作完成时需关闭描述符。 如果不这样做会导致内存泄漏,最终造成应用崩溃。
fs.open(`${__dirname}/demo.txt`, 'w+', (err, fd) => {
console.log(fd)
fs.close(fd, err => {
if (err) throw err
})
})
3. fs. readFile
异步地读取一个文件的全部内容
- path 同上
- options
- encoding
- flag 同上
- callback
- err
Error
- data
String|Buffer
- err
fs.readFile('/etc/passwd', (err, data) => {
if (err) throw err
console.log(data)
})
4. fs.writeFile
异步地写入数据到文件,如果文件已经存在,则覆盖文件
- file
String|Buffer|URL|integer
- data
String|Buffer|Uint8Array
- options
- encoding
- mode
- flag
- callback
- err
fs.writeFile('./tmp/文件名.txt', 'Node.js', err => {
if (err) throw err
console.log('文件已保存!')
})
5. fs.read
使用文件描述符来读取文件
- fd 通过 fs.open() 方法返回的文件描述符
- buffer 数据将被写入到的 buffer,也就是用来存放读取数据的缓冲区
- offset 缓冲区写入的写入偏移量
- length 要从文件中读取的字节数
- position 文件读取的起始位置
- callback
- err
- bytesRead 读取的字节数
- buffer 缓冲区对象
const fs = reuqire('fs')
const buf = new Buffer.alloc(1024)
fs.open('./tmp/demo.txt', 'r+', (err, fd) => {
fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => {
// 仅输出读取的字节
if(bytes > 0){
console.log(buf.slice(0, bytes).toString())
}
})
})
6. fs.readdir
读取一个目录的内容
- path
- options
- encoding
- callback
- err
- files
String[]|Buffer[]
目录中不包括'.'
和'..'
的文件名的数组
fs.readdir('/tmp/', (err, files) => {
if (err) {
return console.error(err)
}
files.forEach( function (file){
console.log( file )
})
})
7. fs.mkdir
- path
- mode 默认是0777
- callback 无参数
8. fs.rmdir
- path
- callback 无参数
9. fs.Stats
用来获取一个文件的信息
- fs.stat()
- fs.lstat()
- fs.fstat()
如果传入这些函数的 options 中的 bigint 为 true,则数值会是 bigint 型而不是 number 型。
fs.stat('./demo.txt', (err, stats) => {
console.log(stats.isFile()) // true
})
stats可以用来判断当前path是什么类型,返回布尔值。
方法 | 描述 |
---|---|
stats.isFile() | 文件 |
stats.isDirectory() | 目录 |
stats.isSocket() | socket |
stats.size | 文件字节大小 |
参考