极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node

本文更佳阅读体验:https://www.yuque.com/sunluyong/node/fs-write

看完文件读取再看文件写入非常简单,两者的操作几乎一一对应

fs.writeFile

fs.writeFile(file, data[, options], callback)

  1. file:文件名或文件描述符
  2. data:常用的主要是 string 和 buffer
  3. callback(err)

当 file 是文件名时,则异步地写入数据到文件,如果文件已存在,则覆盖文件内容

const fs = require('fs');

const data = Buffer.from('Hello, Node.js');
fs.writeFile('./test.txt', data, err => {
if (err) throw err;
console.log('文件已被保存');
});

fs.write

fs.write 有两种重载

  1. fs.write(fd, buffer[, offset[, length[, position]]], callback):参数含义和 fs.read 几乎相同
  2. fs.write(fd, string[, position[, encoding]], callback):只能把字符串内容全部写入文件

两个的区别就是适用 buffer 可以治写入 buffer 中 offset ~ length + offset 的内容,而使用字符串只能把字符串内容全部写入文件

const fs = require('fs');

const data1 = Buffer.from('Hello, Node.js');
const data2 = 'Hello, Node.js'; const fd = fs.openSync('./test.txt', 'w');
console.log(fd) fs.write(fd, data1, err => {
if (err) throw err;
console.log('data1 已被写入');
}); fs.write(fd, data2, err => {
if (err) throw err;
console.log('data2 已被写入');
}); setTimeout(() => {
fs.close(fd, console.log);
}, 100);

fs.appendFile

fs.appendFile(path, data[, options], callback) 将数据追加到文件尾部,如果文件不存在则创建该文件

const fs = require('fs/promises');

const data1 = Buffer.from('Hello,');
const data2 = Buffer.from(' Node.js'); fs.appendFile('./test.txt', data1)
.then(() => {
fs.appendFile('./test.txt', data2);
console.log('文件内容追加完成');
});

fs.createWriteStream

fs.createWriteStream(path[, options]) 用来创建一个可写的文件流,options 和 fs.createReadStream 几乎相同
options(比较常用的有)

  • fd: 默认值 null,如果指定了 fd,则会忽略 path 参数,使用指定的文件描述符(不会再次触发 open 事件)
  • mode:默认值 0o666
  • autoClose: 默认值: true,当 'error' 或 'finish' 事件时,文件描述符会被自动地关闭
  • start: 开始写入文件的位置,不设置默认覆盖

把一个可读流内容写到可写流非常简单

const fs = require('fs');

fs.createReadStream('./test.txt')
.pipe(fs.createWriteStream('./copy.txt'));

关于流的介绍和更多使用在 Buffer 和 Stream 章节会有详细介绍

最新文章

  1. 我将系统从Windows迁移至Linux下的点点滴滴
  2. (error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk
  3. uoj98未来程序改 纯暴力不要想了
  4. DTCMS插件的制作实例电子资源管理(二)Admin后台页面编写
  5. Android课程---关于对话框的学习
  6. 5.6 WebDriver API实例讲解(16-30)
  7. 带你深入了解Web站点数据库的分布存储
  8. 【JQuery】eval()出现missing after property id 错误。
  9. http://begin.lydsy.com/JudgeOnline/problem.php?id=2774(poi病毒)
  10. Java工具类之——BigDecimal运算封装(包含金额的计算方式)
  11. 查询优化--ORDER BY查询优化
  12. JAVA第一周学习
  13. BZOJ2946 [Poi2000]公共串(后缀自动机)
  14. Fastjson-fastjson中$ref对象重复引用问题
  15. 在eclipse中启动项目报java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
  16. Linux中安装绿色软件的方法
  17. Java并发编程73道面试题及答案 —— 面试稳了
  18. 应用DBExportDoc导出mysql库为word07文档
  19. 网页请求get方式
  20. 存储过程打印超过8000的VARCHAR字符的问题

热门文章

  1. 曹工说Spring Boot源码(30)-- ConfigurationClassPostProcessor 实在太硬核了,为了了解它,我可能debug了快一天
  2. Spring Date JPA实现增删改查
  3. API返回延迟,FPM重启后恢复之后又重现 问题解决方案
  4. 重置spyder 解决 gbk 编码不能读取问题
  5. Button基本用语
  6. PHP jddayofweek() 函数
  7. PHP cos() 函数
  8. loj #6039 「雅礼集训 2017 Day5」珠宝 分组背包 决策单调性优化
  9. JS 常用方法汇总(不定期更新)
  10. Jvm相关文章