node基础-文件系统-文件写操作
文件操作频率最高的就是读跟写。nodejs的文件的读取API在《node基础-文件系统-读取文件》里已经简单介绍过,本文就简单介绍下nodejs的文件写API。
nodejs的文件操作均提供了同步、异步两种方式,写操作也是同样的,常用的两个接口为fs.writeFile(异步)、fs.writeFileSync(同步),下面就来看看他们的使用以及区别。
fs.writeFile(filename, data, [options], callback)
先来看下API说明
- /**
- * 往文件里异步写数据,写入的内容可以是字符串,也可以是二进制数据。
- * 如果文件不存在,则创建;如果文件已存在,那么内容会被覆盖
- * @param {String} filename 文件名
- * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
- * @param {Object} [options]
- * @param {String} options.encoding 编码,默认是utf8
- * @param {Number} options.mode=438 模式
- * @param {String} options.flag=w 写文件的模式
- * @param {Function} callback 回调方法
- */
- fs.writeFile(filename, data, [options], callback)
接下来我们来看看实际例子,首先,需要引入fs,下面为节省篇幅就不再贴这行代码了
- var fs = require('fs');
例子一:往不存在的文件里写内容
往一个不存在的文件里写内容,则会先创建该文件,再往里面写内容
- var noneExistFileName = ['async_create.', new Date()-0, '.txt'].join('');
- fs.writeFile(noneExistFileName, '文件不存在,则创建', function(err){
- if(err) throw err;
- console.log(noneExistFileName+'不存在,被创建了!');
- });
例子二:往存在的文件里写内容
如果该文件已存在,则原有文件内容会北覆盖
- fs.writeFile('async_exists.txt', '文件已存在,则覆盖内容 -- '+(new Date()-0), function(err){
- if(err) throw err;
- console.log('exists.txt已存在,内容被覆盖!');
- });
例子三:往已经存在的文件里追加内容
options.flag 设置为 'a' 时,则会将写模式变为追加内容
- fs.writeFile('async_add.txt', '\n文件已存在,并追加内容 -- '+(new Date()-0), {
- flag: 'a'
- }, function(err){
- if(err) throw err;
- console.log('exists.txt已存在,内容被覆盖!');
- });
fs.writeFileSync(filename, data, [options])
写文件的同步版本,同样先来看下API说明,你会发现跟fs.writeFile 没啥区别,就是少了个回调
- /**
- * 文件同步写接口,是fs.writeFile的同步版本,参数也差不多
- * @param {String} filename 文件名
- * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
- * @param {Object} [options]
- * @param {String} options.encoding 编码,默认是utf8
- * @param {Number} options.mode=438 模式
- * @param {String} options.flag=w 写文件的模式
- */
- fs.writeFileSync(filename, data, [options])
下面我们看下具体例子
例子一:往不存在的文件里写内容,则创建该文件
- // case 1:往不存在的文件里写内容,则创建该文件
- var noneExistFileName = ['sync_create.', new Date()-0, '.txt'].join('');
- fs.writeFile(noneExistFileName, '文件不存在,则创建');
例子二:往存在的文件里写内容,原有内容被覆盖
- fs.writeFile('sync_exists.txt', '文件已存在,则覆盖内容 -- '+(new Date()-0));
例子三:往已经存在的文件里追加内容
- fs.writeFile('sync_add.txt', '\n文件已存在,并追加内容 -- '+(new Date()-0), {
- flag: 'a'
- });
完整示例
demo下载请点击,将代码随便解压缩到任意目录下,然后在该目录下运行命令 node writefile.js 即可
- /**
- * 文件写入demo,by 程序猿小卡
- */
- var fs = require('fs');
- /**
- * 往文件里异步写数据,写入的内容可以是字符串,也可以是二进制数据。
- * 如果文件不存在,则创建;如果文件已存在,那么内容会被覆盖
- * @param {String} filename 文件名
- * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
- * @param {Object} [options]
- * @param {String} options.encoding 编码,默认是utf8
- * @param {Number} options.mode=438 模式
- * @param {String} options.flag=w 写文件的模式
- * @param {Function} callback 回调方法
- */
- // fs.writeFile(filename, data, [options], callback)
- // case 1:往不存在的文件里写内容,则创建该文件
- var noneExistFileName = ['async_create.', new Date()-0, '.txt'].join('');
- fs.writeFile(noneExistFileName, '文件不存在,则创建', function(err){
- if(err) throw err;
- console.log(noneExistFileName+'不存在,被创建了!');
- });
- // case 2:往存在的文件里写内容,原有内容被覆盖
- fs.writeFile('async_exists.txt', '文件已存在,则覆盖内容 -- '+(new Date()-0), function(err){
- if(err) throw err;
- console.log('exists.txt已存在,内容被覆盖!');
- });
- // case 3:往已经存在的文件里追加内容
- fs.writeFile('async_add.txt', '\n文件已存在,并追加内容 -- '+(new Date()-0), {
- flag: 'a'
- }, function(err){
- if(err) throw err;
- console.log('exists.txt已存在,内容被覆盖!');
- });
- /**
- * 文件同步写接口,是fs.writeFile的同步版本,参数也差不多
- * @param {String} filename 文件名
- * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
- * @param {Object} [options]
- * @param {String} options.encoding 编码,默认是utf8
- * @param {Number} options.mode=438 模式
- * @param {String} options.flag=w 写文件的模式
- */
- // fs.writeFileSync(filename, data, [options])
- // case 1:往不存在的文件里写内容,则创建该文件
- var noneExistFileName = ['sync_create.', new Date()-0, '.txt'].join('');
- fs.writeFile(noneExistFileName, '文件不存在,则创建');
- // case 2:往存在的文件里写内容,原有内容被覆盖
- fs.writeFile('sync_exists.txt', '文件已存在,则覆盖内容 -- '+(new Date()-0));
- // case 3:往已经存在的文件里追加内容
- fs.writeFile('sync_add.txt', '\n文件已存在,并追加内容 -- '+(new Date()-0), {
- flag: 'a'
- });
写在后面
官方文档请点击
本文如有错漏,请指出 :)
node基础-文件系统-文件写操作的更多相关文章
- python 基础之文件读操作
创建一个名为‘尘曦’的文件内容如下 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. ...
- delphi 基础之三 文件流操作
文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的, ...
- c#创建文件( File.Create() )后对文件写操作出错的分析
在C#中,使用system.IO.File.Create()创建完一个文件之后,如果需要对这个文件进行写操作,会出现错误,提示你“这个文件正在被使用”. 原因是System.IO.File.Creat ...
- Python基础灬文件常用操作
文件常用操作 文件内建函数和方法 open() :打开文件 read():输入 readline():输入一行 seek():文件内移动 write():输出 close():关闭文件 写文件writ ...
- C语言基础 (12) 文件的操作 FILE
课程回顾 结构体基本操作: 结构体类型的定义 // struct为关键字 Stu为自定义标识符 // struct Stu才是结构体类型 // 结构体成员不能在定义类型时赋值 struct Stu { ...
- node基础07:写文件
1.writeFile //server.js var http = require("http"); var writefile = require("./writef ...
- python3基础之文件对象操作
1.向文本文件中写入内容 s = 'Hello world\n文本文件的读取方法\n文本文件的写入方法\n' # 需要写入文件的字符串 print('显示需要写入的内容:\n{0:s}'.format ...
- python对文件写操作报错UnicodeEncodeError
2017-04-25 python连mongodb数据库并将提取部分数据写入本地文件时,出现UnicodeEncodeError. 解决方法:指定文件字符集为utf-8,在文件头部加入以下代码 imp ...
- 文件写操作--WriteLog
private static void Write(string sMsg, string fileName) { if (sMsg != "") { try { var dir ...
随机推荐
- 无法将数据库从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 ...
- 【mysql数据库】Linux下mysql安装连接全过程(含有问题详解)
本次安装操作在腾讯云上实现(版本:CentOS Linux release 7.4.1708 (Core) ). 根据教程实现(中途各种挖坑,填坑...),地址:http://www.runoob.c ...
- tar压缩/解压用法
格式:tar zcvf 压缩后的路径及包名 你要压缩的文件 z:gzip压缩 c:创建压缩包 v:显示打包压缩解压过程 f:接着压缩 t:查看压缩包内容 x:解压 X:指定文件列表形式排除不需要打包压 ...
- python 进程池pool
进程池子 当你成千上万的业务需要创建成千上万的进程时,我们可以提前定义一个进程池 from multiprocessing import Pool p = Pool(10) #进程池创建方式,类似空任 ...
- [转]Redis学习---Redis高可用技术解决方案总结
[原文]https://www.toutiao.com/i6591646189714670093/ 本文主要针对Redis常见的几种使用方式及其优缺点展开分析. 一.常见使用方式 Redis的几种常见 ...
- Matlab feval函数(转)
http://zhidao.baidu.com/link?url=7CusQYQXhCDB8sUtolMEhI1ctnpblbYrpSnU0fhIh5LvDZuhsBuozQusS6Kb1McTp7x ...
- MySQL基础之 存储引擎
MyISAM存储引擎 缺点:不支持事务,不支持外键.只支持表级锁. 优点:访问速度快,多用于select.insert语句的高负载操作.仅仅支持全文索引. MyISAM缓存在内存的是索引,不是数据.而 ...
- pip安装python模块遇到一直出现retrying的问题
最近安装python模块,遇到这样的一个问题如图所示: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status= ...
- Vuex数据页面刷新丢失问题解决方案
用Vue做项目开发很久了,对于vuex能用.会用,但是因为状态脱离页面和刷新丢失两个原因,一直都有种抵触,特别是一些简单的数据都是通过query或者本地存储就解决了,然而对于一些复杂内容,不可避免的还 ...
- jumperserver docker部署
最近在考虑 系统安全问题,jumperserver 用docker 部署比较简单1. 安装redis2.安装mariadb create database jumpserver charset='ut ...