文件操作频率最高的就是读跟写。nodejs的文件的读取API在《node基础-文件系统-读取文件》里已经简单介绍过,本文就简单介绍下nodejs的文件写API。

nodejs的文件操作均提供了同步、异步两种方式,写操作也是同样的,常用的两个接口为fs.writeFile(异步)、fs.writeFileSync(同步),下面就来看看他们的使用以及区别。

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

先来看下API说明

  1. /**
  2. * 往文件里异步写数据,写入的内容可以是字符串,也可以是二进制数据。
  3. * 如果文件不存在,则创建;如果文件已存在,那么内容会被覆盖
  4. * @param {String} filename 文件名
  5. * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
  6. * @param {Object} [options]
  7. * @param {String} options.encoding 编码,默认是utf8
  8. * @param {Number} options.mode=438 模式
  9. * @param {String} options.flag=w 写文件的模式
  10. * @param {Function} callback 回调方法
  11. */
  12. fs.writeFile(filename, data, [options], callback)

接下来我们来看看实际例子,首先,需要引入fs,下面为节省篇幅就不再贴这行代码了

  1. var fs = require('fs');

例子一:往不存在的文件里写内容

往一个不存在的文件里写内容,则会先创建该文件,再往里面写内容

  1. var noneExistFileName = ['async_create.', new Date()-0, '.txt'].join('');
  2. fs.writeFile(noneExistFileName, '文件不存在,则创建', function(err){
  3. if(err) throw err;
  4. console.log(noneExistFileName+'不存在,被创建了!');
  5. });

例子二:往存在的文件里写内容

如果该文件已存在,则原有文件内容会北覆盖

  1. fs.writeFile('async_exists.txt', '文件已存在,则覆盖内容 -- '+(new Date()-0), function(err){
  2. if(err) throw err;
  3. console.log('exists.txt已存在,内容被覆盖!');
  4. });

例子三:往已经存在的文件里追加内容

options.flag 设置为 'a' 时,则会将写模式变为追加内容

  1. fs.writeFile('async_add.txt', '\n文件已存在,并追加内容 -- '+(new Date()-0), {
  2. flag: 'a'
  3. }, function(err){
  4. if(err) throw err;
  5. console.log('exists.txt已存在,内容被覆盖!');
  6. });

fs.writeFileSync(filename, data, [options])

写文件的同步版本,同样先来看下API说明,你会发现跟fs.writeFile 没啥区别,就是少了个回调

  1. /**
  2. * 文件同步写接口,是fs.writeFile的同步版本,参数也差不多
  3. * @param {String} filename 文件名
  4. * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
  5. * @param {Object} [options]
  6. * @param {String} options.encoding 编码,默认是utf8
  7. * @param {Number} options.mode=438 模式
  8. * @param {String} options.flag=w 写文件的模式
  9. */
  10. fs.writeFileSync(filename, data, [options])

下面我们看下具体例子

例子一:往不存在的文件里写内容,则创建该文件

  1. // case 1:往不存在的文件里写内容,则创建该文件
  2. var noneExistFileName = ['sync_create.', new Date()-0, '.txt'].join('');
  3. fs.writeFile(noneExistFileName, '文件不存在,则创建');

例子二:往存在的文件里写内容,原有内容被覆盖

  1. fs.writeFile('sync_exists.txt', '文件已存在,则覆盖内容 -- '+(new Date()-0));

例子三:往已经存在的文件里追加内容

  1. fs.writeFile('sync_add.txt', '\n文件已存在,并追加内容 -- '+(new Date()-0), {
  2. flag: 'a'
  3. });

完整示例

demo下载请点击,将代码随便解压缩到任意目录下,然后在该目录下运行命令 node writefile.js 即可

  1. /**
  2. * 文件写入demo,by 程序猿小卡
  3. */
  4. var fs = require('fs');
  5.  
  6. /**
  7. * 往文件里异步写数据,写入的内容可以是字符串,也可以是二进制数据。
  8. * 如果文件不存在,则创建;如果文件已存在,那么内容会被覆盖
  9. * @param {String} filename 文件名
  10. * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
  11. * @param {Object} [options]
  12. * @param {String} options.encoding 编码,默认是utf8
  13. * @param {Number} options.mode=438 模式
  14. * @param {String} options.flag=w 写文件的模式
  15. * @param {Function} callback 回调方法
  16. */
  17. // fs.writeFile(filename, data, [options], callback)
  18.  
  19. // case 1:往不存在的文件里写内容,则创建该文件
  20. var noneExistFileName = ['async_create.', new Date()-0, '.txt'].join('');
  21. fs.writeFile(noneExistFileName, '文件不存在,则创建', function(err){
  22. if(err) throw err;
  23. console.log(noneExistFileName+'不存在,被创建了!');
  24. });
  25.  
  26. // case 2:往存在的文件里写内容,原有内容被覆盖
  27. fs.writeFile('async_exists.txt', '文件已存在,则覆盖内容 -- '+(new Date()-0), function(err){
  28. if(err) throw err;
  29. console.log('exists.txt已存在,内容被覆盖!');
  30. });
  31.  
  32. // case 3:往已经存在的文件里追加内容
  33. fs.writeFile('async_add.txt', '\n文件已存在,并追加内容 -- '+(new Date()-0), {
  34. flag: 'a'
  35. }, function(err){
  36. if(err) throw err;
  37. console.log('exists.txt已存在,内容被覆盖!');
  38. });
  39.  
  40. /**
  41. * 文件同步写接口,是fs.writeFile的同步版本,参数也差不多
  42. * @param {String} filename 文件名
  43. * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
  44. * @param {Object} [options]
  45. * @param {String} options.encoding 编码,默认是utf8
  46. * @param {Number} options.mode=438 模式
  47. * @param {String} options.flag=w 写文件的模式
  48. */
  49. // fs.writeFileSync(filename, data, [options])
  50.  
  51. // case 1:往不存在的文件里写内容,则创建该文件
  52. var noneExistFileName = ['sync_create.', new Date()-0, '.txt'].join('');
  53. fs.writeFile(noneExistFileName, '文件不存在,则创建');
  54.  
  55. // case 2:往存在的文件里写内容,原有内容被覆盖
  56. fs.writeFile('sync_exists.txt', '文件已存在,则覆盖内容 -- '+(new Date()-0));
  57.  
  58. // case 3:往已经存在的文件里追加内容
  59. fs.writeFile('sync_add.txt', '\n文件已存在,并追加内容 -- '+(new Date()-0), {
  60. flag: 'a'
  61. });

写在后面

官方文档请点击

本文如有错漏,请指出 :)

node基础-文件系统-文件写操作的更多相关文章

  1. python 基础之文件读操作

    创建一个名为‘尘曦’的文件内容如下 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. ...

  2. delphi 基础之三 文件流操作

    文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的, ...

  3. c#创建文件( File.Create() )后对文件写操作出错的分析

    在C#中,使用system.IO.File.Create()创建完一个文件之后,如果需要对这个文件进行写操作,会出现错误,提示你“这个文件正在被使用”. 原因是System.IO.File.Creat ...

  4. Python基础灬文件常用操作

    文件常用操作 文件内建函数和方法 open() :打开文件 read():输入 readline():输入一行 seek():文件内移动 write():输出 close():关闭文件 写文件writ ...

  5. C语言基础 (12) 文件的操作 FILE

    课程回顾 结构体基本操作: 结构体类型的定义 // struct为关键字 Stu为自定义标识符 // struct Stu才是结构体类型 // 结构体成员不能在定义类型时赋值 struct Stu { ...

  6. node基础07:写文件

    1.writeFile //server.js var http = require("http"); var writefile = require("./writef ...

  7. python3基础之文件对象操作

    1.向文本文件中写入内容 s = 'Hello world\n文本文件的读取方法\n文本文件的写入方法\n' # 需要写入文件的字符串 print('显示需要写入的内容:\n{0:s}'.format ...

  8. python对文件写操作报错UnicodeEncodeError

    2017-04-25 python连mongodb数据库并将提取部分数据写入本地文件时,出现UnicodeEncodeError. 解决方法:指定文件字符集为utf-8,在文件头部加入以下代码 imp ...

  9. 文件写操作--WriteLog

    private static void Write(string sMsg, string fileName) { if (sMsg != "") { try { var dir ...

随机推荐

  1. 无法将数据库从SINGLE_USER模式切换回MULTI_USER模式(Error 5064),及查找SQL Server数据库中用户spid(非SQL Server系统spid)的方法

    今天公司SQL Server数据库无意间变为SINGLE_USER模式了,而且使用如下语句切换回MULTI_USER失败: ALTER DATABASE [MyDB] SET MULTI_USER W ...

  2. 【mysql数据库】Linux下mysql安装连接全过程(含有问题详解)

    本次安装操作在腾讯云上实现(版本:CentOS Linux release 7.4.1708 (Core) ). 根据教程实现(中途各种挖坑,填坑...),地址:http://www.runoob.c ...

  3. tar压缩/解压用法

    格式:tar zcvf 压缩后的路径及包名 你要压缩的文件 z:gzip压缩 c:创建压缩包 v:显示打包压缩解压过程 f:接着压缩 t:查看压缩包内容 x:解压 X:指定文件列表形式排除不需要打包压 ...

  4. python 进程池pool

    进程池子 当你成千上万的业务需要创建成千上万的进程时,我们可以提前定义一个进程池 from multiprocessing import Pool p = Pool(10) #进程池创建方式,类似空任 ...

  5. [转]Redis学习---Redis高可用技术解决方案总结

    [原文]https://www.toutiao.com/i6591646189714670093/ 本文主要针对Redis常见的几种使用方式及其优缺点展开分析. 一.常见使用方式 Redis的几种常见 ...

  6. Matlab feval函数(转)

    http://zhidao.baidu.com/link?url=7CusQYQXhCDB8sUtolMEhI1ctnpblbYrpSnU0fhIh5LvDZuhsBuozQusS6Kb1McTp7x ...

  7. MySQL基础之 存储引擎

    MyISAM存储引擎 缺点:不支持事务,不支持外键.只支持表级锁. 优点:访问速度快,多用于select.insert语句的高负载操作.仅仅支持全文索引. MyISAM缓存在内存的是索引,不是数据.而 ...

  8. pip安装python模块遇到一直出现retrying的问题

    最近安装python模块,遇到这样的一个问题如图所示: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status= ...

  9. Vuex数据页面刷新丢失问题解决方案

    用Vue做项目开发很久了,对于vuex能用.会用,但是因为状态脱离页面和刷新丢失两个原因,一直都有种抵触,特别是一些简单的数据都是通过query或者本地存储就解决了,然而对于一些复杂内容,不可避免的还 ...

  10. jumperserver docker部署

    最近在考虑 系统安全问题,jumperserver 用docker 部署比较简单1. 安装redis2.安装mariadb create database jumpserver charset='ut ...