0. fs模块文件读写
一般操作:
fs.open打开文件
fs.read读文件
fs.write写文件
fs.fsync刷新内存缓存以写入文件(类似于C/C++语言的flush)
fs.close关闭文件
文件读写:
fs.writeFile
fs.writeFileSync(同步)
fs.readFile
fs.readFileSync(同步)
通过pipe管道读写数据流,用于大文件:
fs.createReadStream
fs.createWriteStream
追加数据文件:
fs.appendFile
目录操作:
fs.mkdir创建目录
fs.readdir读目录
其他操作:
fs.stat/fs.lstat查看文件、目录信息
fs.exists查看文件或目录是否存在
fs.utimes访问修改时间
fs.chmod/fs.chown权限操作
fs.rename重命名目录或文件
fs.rmdir移除空目录
fs.watchFile/fs.unwatchFile监视文件
(fs的很多API都通过回调函数传递结果,此外很多版本都有Sync结尾的同步版本API):
1. Buffer数据块
类似js的字符串,不过可存储二进制数据,且不同于字符串,其可读写。
除了读取文件得到Buffer的实例外,也可以直接new构造。
.......
2. Stream数据流
通过fs.createReadStream、fs.createWriteStream处理大文件数据,以一边读取一边处理(基于事件机制);
灵活运用pause暂停读取、写入以及resume唤醒以继续读取或写入,可防止读写缓冲区爆仓。
事实上Stream的pipe方法已实现以上防止缓冲区爆仓的问题。
......
3. path路径
path内置模块,提供文件路径相关操作
path.normalize标准化路径
path.join拼接路径,转为标准化后的路径
path.extname获取文件扩展名
......
4. 文本编码
UTF-8编码可能带有BOM,JS读取文件或者合并操作时若存在BOM,则一般需要跳过BOM头,BOM字符如:UTF16BE:0xFEFF, UTF16LE: OXFFFE, UTF8:0xEFBBBF;
根据文本文件头前几个字节等来判断文件是否包含BOM,以及使用的哪种Unicode编码。
GBK编码需借助第三方包iconv-lite来转化GBK为UTF8
内置的binary编码,可实现类似单字节编码,统一使用单字节编码来读取文件,不用关心文件的实际编码是GBK还是UTF8。