ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] >[warning] 参照api版本为10.16.2 `fs`,即`filesystem`,该模块提供本地文件的读写能力。这个模块几乎对所有操作提供异步和同步两种操作方式,以供选择 ## 1. writeFile(),writeFileSync() 写入文件 * `writeFile(file, data[, options], callback)` 异步写入文件 ~~~ fs.writeFile('./test.txt','this is a test', function(err) { if (err) { throw err } }) ~~~ * writeFileSync(file, data[, options]) 异步写入的同步版本 ## 2. readFile(), readileSync() 读取数据 * `readFile(path[, options], callback)` 异步读取数据 ~~~ var cwd = process.cwd() console.log('cwd', cwd) fs.readFile('./images/风景1.jpg', function(err, buffer) { if (err) { throw err } console.log('buffer', buffer) }) ~~~ path: 文件路径,可以是绝对路径,也可以是相对路径。相对路径则必须是当前进程所在的路径(`process.cwd()`); options: 可选填,默认配置对象为 { encoding: null, flag: 'r' } 即文件编码为null,读取模式为只读。不填写,readFile默认返回Buffer实例,否则返回字符串 callback: 读取完成的回调函数,该函数的第一个参数为发生错误时的错误对象,第二个参数代表文件内容 * `readileSync(path[, options])` 同步读取数据 异步读取的同步版本 ## 3. mkdir(), mkdirSync() 创建目录 * `mkdir(path[, options], callback)`,异步创建目录 ~~~ var fs = require('fs') // 无论该目录是否存在temp和temp/test fs.mkdir('./tmp/test/t', { recursive: true }, function(err) { if (err) { throw err } }); ~~~ * `mkdirSync(path[, options])` 异步创建目录的同步版本 ## 4. readdir(),readdirSync() 读取目录 * readdir方法读取目录内容,返回一个包含子目录名称的数组 ~~~ fs.readdir('./tmp/test/', function(err, files) { if (err) { throw err } console.log('files, ', files) }) ~~~ * readdirSync(path[, options]) 异步读取目录的同步版本 ## 5. stat() 判断正在处理的内容类型 ~~~ fs.stat('./tmp/test/t', function(err, stats) { if (err) { throw err } console.log('stats, ', stats) }) ~~~ * fs.stat(path[, options], callback),该方法的参数是一个文件或目录,它产生一个对象,该对象包含了该文件或目录的具体信息。我们往往通过该方法,判断正在处理的到底是一个文件,还是一个目录 ## 6. watchfile(),unwatchfile() 监听/解除监听文件 * `watchfile(filename[, options], listener)`,该方法监听一个文件,每当访问文件时都会调用`listener`回调。 ~~~ fs.watchFile('test.text', function(curr, prev) { console.log(`当前的最近修改时间是: ${curr.mtime}`); console.log(`之前的最近修改时间是: ${prev.mtime}`); }) ~~~ * `unwatchfile(filename[, listener])`方法用于解除对文件的监听 ## 7. createReadStream(),createWriteStream() 打开/写入数据 ~~~ var fs = require('fs'); function readLines(input, func) { var remaining = ''; input.on('data', function(data) { remaining += data; var index = remaining.indexOf('\n'); var last = 0; while (index > -1) { var line = remaining.substring(last, index); last = index + 1; func(line, index); index = remaining.indexOf('\n', last); } remaining = remaining.substring(last); }); input.on('end', function() { if (remaining.length > 0) { func(remaining, 'last'); } }); } function func(data, index) { console.log(`${index}: ${data}`); } var input = fs.createReadStream('./lines.txt'); readLines(input, func); ~~~ * createReadStream(path[, options]),该方法往往用于打开大型的文本文件,创建一个读取操作的数据流。所谓大型文本文件,指的是文本文件的体积很大,读取操作的缓存装不下,只能分成几次发送,每次发送会触发一个data事件,发送结束会触发end事件 * createWriteStream方法创建一个写入数据流对象,该对象的write方法用于写入数据,end方法用于结束写入操作 * `createWriteStream`方法和`createReadStream`方法配合,可以实现拷贝大型文件