文件操作频率最高的就是读跟写。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基础-文件系统-文件写操作的更多相关文章

  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. CSS未知宽高元素水平垂直居中

    方法一 :table.cell-table 思路:显示设置父元素为:table,子元素为:cell-table,这样就可以使用vertical-align: center,实现水平居中优点:父元素(p ...

  2. 向kindle传送文件

    自从有了kindle以后,只要不是pdf的电子书,基本上都用kindle来看了,毕竟水墨屏还是很护眼的,但是这就带来了向kindle传输文件的问题 绝大部分的电子书用邮件推送就可以解决了,但是还有一些 ...

  3. Questions about UIUC and USC

    Questions about UIUC and USC I am admitted to University of Illinois at Urbana-Champaign (UIUC) Prof ...

  4. HashSet集合的add()方法的源码

    interface Collection { ... } interface Set extends Collection { ... } class HashSet implements Set { ...

  5. November 10th, 2017 Week 45th Friday

    A little bit of mercy makes the world less cold and more just. 多一点怜悯就可以让这个世界少一点冷酷而多一点正义. Maybe there ...

  6. swift的类型约束

    关键词: 类型与功能绑定.类型指定.访问控制. 类型约束的本质: 1.是否强制指定具有某些特征的类型:看类型构造器的定义本身是否对类型有约束: 2.访问控制:类型构造器的功能分为通用功能和约束功能: ...

  7. POJ 1066 昂贵的聘礼

    Description 年轻的探险家来到了一个印第安部落里. 在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长减 ...

  8. Codeforces Round #553 (Div. 2)B. Dima and a Bad XOR 思维构造+异或警告

    题意: 给出一个矩阵n(<=500)*m(<=500)每一行任选一个数 异或在一起 求一个 异或在一起不为0 的每行的取值列号 思路: 异或的性质  交换律 x1^x2^x3==x3^x2 ...

  9. CentOS 6.5安装配置NFS服务器

    OS:centos 6.5 服务端:10.1.11.201 客户端:10.1.11.202 10.1.11.203 10.1.11.204 1.服务端的配置 安装必须的yum包: yum -y ins ...

  10. SQL操作语句

    SQL语句与Mysql的语句大体上比较相似.以下是sql server的一套练习题,是很好的数据库操作语句学习资料,学校的学习资料,在此整理了以下. 数据库exam:这是一个模拟电子商务,网上直销的数 ...