概述
- 文件操作的同步与异步
- 对文件的读写操作
- 从指定位置开始读写文件
- 创建与读取目录
- 查看文件或目录信息
- 其它操作
- 文件流
文件操作的同步与异步
所有文件、目录的创建、读取、删除操作都有同步和异步两种方式,同步方式方法名后有 Sync
1 | let fs = require('fs'); |
对文件的读写操作
完整读写
读取
readFile(path, {encoding:’’,flag:’’}, callback(err, data)):完整读取文件
encoding: utf8, ascii, base64; 默认二进制
flag:
1 | r, 读取文件,不存在则抛出异常 |
写入
fs.writeFile(path, data, [options], callback)
1 | option:{ |
mode:第一位为 0,第二位为文件或目录所有者的权限, 第三个为文件或目录所有者所属用户组的权限, 第四个为其他人权限
数字所对应的权限:
- 1:执行权限
- 2:写权限
- 3:读权限
fs.writeFileSync(); 同步版本的 writeFile()
fs.appendFile(fileName, data, [options], callback) // 在文件地步追加写入数据,文件不存在则创建文件
options 中 flag 默认为 a
同步版:appendFileSync()
从指定位置开始读写文件
读取文件
fs.open(filename, flags, [mode], callback(err, fd)),fd 是文件句柄。同步版:fs.openSync() //106 行
文件句柄用于 read 、 readSync、 write 、writeSync 方法
fs.read(fd, buffer, offset, length, position, callback(err, bytesRead, buffer))
- buffer 是存储读取数据的缓冲池;
- offset 是存储池中开始存储时的偏移字节数;
- length 需要读取的字节数;
- position 读取文件的开始位置 以字节为单位;
- bytesRead 实际读取到的字节数,在 length + position 大于文件长度时 bytesRead !== length
同步读取:readSync()返回实际读取到的字节数
写入文件
fs.write(fd, buffer, offset, length, position,callback(err, writeen, buffer))
- written: 被写入的字节数
- buffer: 被读取的缓冲区对象 和 write 参数里的 buffer 相同
同步版: writeSync();
关闭文件
fs.close(fd, callback)
同步版本:fs.closeSync(fd)
fs.fsync(fd, callback) 同步缓存中的数据到文件
fs.fsyncSync(fd) 同步版本的 fsync
创建与读取目录
fs.mkdir(path, [mode], callback(err))
- mode 默认 0777
mkdirSync();
fs.readdir(path, callback(err, files))
fs.readdirSync()
查看文件或目录信息
fs.stat(path, callback(err, stats)),fs.lstat(path, callback(err, stats))两者基本相同,lstat 不能查看符号链接文件信息
1 | stats对象:{ |
同步版:fs.statSync fs.lstatSync
使用 open 和 openSync 打开的文件使用 fs.fstat(fd,callback)访问信息,同步版为 fs.fstatSync
检查文件或目录是否存在
fs.exists(path, callback(exists)) 回掉函数的参数为布尔值,文件存在则为 true
同步版本:fs.existsSync
获取绝对路径
fs.realpath(path,[cache],callback(err, resolvedPath))
cache 是预先指定的路径对象:{‘/etc’: ‘/somepath/etc’}
同步版: fs.realpathSync()
修改文件访问时间和修改时间
fs.utimes(path, atime, mtime, callback(err))
使用 open 打开的文件时间修改使用:fs.futimes(fd, atime, mtime, callback)
修改文件或目录的读写权限
fs.chmod(path, mode, callback(err))
fs.fchomd(fd, mode, callback) 使用 open 打开的文件
其他操作 P118
移动文件或目录
fs.rename(oldname, newname, callback(err))
硬链接操作
_硬链接_:实际上就是文件名,通过特殊操作可以为文件创造多个文件名即多个硬链接
创建硬链接
1 | fs.link(srcpath, dstpath,callback(err)) |
删除硬链接
1 | fs.unlink(path,callback(err)); // 当删除的硬链接是文件的最后一个硬链接时等同于删除文件 |
符号链接
符号链接亦称软链接,是一种仅包含另一个文件或目录的路径及文件名或目录名的特殊文件
1 | // 创建 |
截断文件
文件截断是先清楚文件内容,然后修改文件尺寸的操作
1 | fs.truncate(filename, length, callback(err)) |
删除空目录
fs.rmdir(path, callback(err))
监视文件或目录
1 | fs.watchFile(file,[options],listener(curr, prev)) |
fs.unwatchFile(filname, [listener]),当文件发生更改时取消某个处理函数,没有 listener 表示取消监听
fs.watch(file, [options],listener(event, file));event 为 rename(重命名,移动,删除)或 change(修改);watch 函数返回一个 fs.FSWatcher 对象,使用此对象的 close 方法关闭 watch 监视