JavaScript 文件操作

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

Node

Node 中的文件系统操作被封装在 fs 模块,每个 API 都提供同步和异步两种形式,异步函数 fs.xxx 对应同步函数是 fs.xxxSync,例如 fs.readFile 对应 fs.readFileSync 。区别主要是同步函数要么返回结果要么抛出异常,而异步函数的参数多了 callback ,用来处理异常或者正常返回的结果。另外,fs.promises 中还提供了基于 Promise 的异步 API。

脚本中用同步 API 更加简洁,以下以同步 API 为例介绍主要操作:

读文件

读文件使用 fs.readFileSync(path[, options]) ,它的第一个参数是路径,第二个参数是 encoding(default: null) 和 flag(default: 'r') 组成的 options,如果 encodingnull,则返回 buffer,否则返回 stringoptions 也可以是 string,这时表示 encoding

支持的 encoding 参考 这里,一般用 utf8 就行了。

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)
复制代码

转载于:https://juejin.im/post/5cc92da36fb9a0320e73e63a

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值