工做中经常须要写一些小脚本处理事情,好比建立测试文件、处理某个文本等等,以前作测试开发的时候是用 Python 作的,如今写前端,JavaScript 成为主力语言,天然想把这些小脚本用 JavaScript 实现。脚本中常见的工做就是文件读写,所以对 JavaScript 文件读写知识作下强化和总结。html
Node 中的文件系统操做被封装在 fs
模块,每一个 API 都提供同步和异步两种形式,异步函数 fs.xxx
对应同步函数是 fs.xxxSync
,例如 fs.readFile
对应 fs.readFileSync
。区别主要是同步函数要么返回结果要么抛出异常,而异步函数的参数多了 callback
,用来处理异常或者正常返回的结果。另外,fs.promises
中还提供了基于 Promise
的异步 API。前端
脚本中用同步 API 更加简洁,如下以同步 API 为例介绍主要操做:node
读文件使用 fs.readFileSync(path[, options])
,它的第一个参数是路径,第二个参数是 encoding
(default: null
) 和 flag
(default: 'r'
) 组成的 options
,若是 encoding
为 null
,则返回 buffer
,不然返回 string
,options
也能够是 string
,这时表示 encoding
。api
支持的 encoding
参考 这里,通常用 utf8
就好了。promise
const fs = require('fs')
// suppose 'xxx' in data.txt
const data = fs.readFileSync('/home/vincent/data.txt', 'utf8')
console.log('data = ', data) // output: data = xxx
复制代码
写文件使用 fs.writeFileSync(path, data[, options])
,第一个参数是路径,第二个是要写入的内容,第三个是 encoding
(default: 'utf8'
)、mode
(default: 0o666
) 和 flag
(default: w
) 组成的 options
,通常 options
使用默认值便可。浏览器
const fs = require('fs')
fs.writeFileSync('/home/vincent/data.txt', 'xxx') // then 'xxx' in data.txt
复制代码
若是文件很大,好比数十 GB 的日志文件,全量读写就不合适了。这时候可使用以下函数操做:异步
fs.createReadStream(path[, options])
fs.createWriteStream(path[, options])
这两个函数返回 Stream
实例,实例方法参考 这里。函数
浏览器环境须要经过 FileReader
API 来读文件内容,主要场景是上传图片前生成预览缩略图、文件内容校验等,示例代码以下:测试
const input = document.getElementsByTagName('input')[0]
input.addEventListener('change', function() {
const file = this.files[0] // suppose file content is 'xxx'
const reader = new FileReader();
reader.onload = function (e) {
const = data = reader.result
console.log(data) // output: xxx
}
reader.readAsText(file, 'UTF-8')
}, false)
复制代码