读书笔记《七天学会NodeJS》(1) - 文件操作
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。