JavaScript 文件操做

工做中经常须要写一些小脚本处理事情,好比建立测试文件、处理某个文本等等,以前作测试开发的时候是用 Python 作的,如今写前端,JavaScript 成为主力语言,天然想把这些小脚本用 JavaScript 实现。脚本中常见的工做就是文件读写,所以对 JavaScript 文件读写知识作下强化和总结。html

Node

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,若是 encodingnull,则返回 buffer,不然返回 stringoptions 也能够是 string,这时表示 encodingapi

支持的 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 实例,实例方法参考 这里函数

Browser

浏览器环境须要经过 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)
复制代码
相关文章
相关标签/搜索