文件操作频率最高的就是读跟写。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. sqlite 字符串拼接

    select path || '%'  from t_category where depth = 0 and type = 0 用'||'拼接字符串 比如path是/1001/的话 那结果就是/10 ...

  2. Android中两个Activity之间简单通信

    在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...

  3. 【转】Java学习---JDK、JRE和JVM的关系

    [原文]https://www.toutiao.com/i6591348937267872269/ 首先是JDK JDK(Java Development Kit) 是 Java 语言的软件开发工具包 ...

  4. python解析式

    一.列表解析式 列表解析是外面一对中括号,它返回的是列表. 一般形式为:[expr for item in itratoble] print([i+1 for i in range(10)]) #结果 ...

  5. 团队作业6--展示博客(Alpha版本)

    一.团队展示: 1.队名:软件1412--博客管理系统 2.队员学号(标记组长) 曾海明(组长):201421122036   周雅静(组员):201421122003  王珏(组员):2014211 ...

  6. 【Ansible 文档】【译文】Ad-Hoc 命令介绍

    Introduction To Ad-Hoc Commands Ad-Hoc命令介绍 下面的例子展示了如何使用 /usr/bin/ansible 来运行ad hoc任务. 什么是ad hoc命令? 一 ...

  7. Redis系列六:redis相关功能

    一. 慢查询原因分析 与mysql一样:当执行时间超过阀值,会将发生时间耗时的命令记录 redis命令生命周期:发送 排队 执行 返回慢查询只统计第3个执行步骤的时间 预设阀值:两种方式,默认为10毫 ...

  8. BZOJ5018:[SNOI2017]英雄联盟(背包DP)

    Description 正在上大学的小皮球热爱英雄联盟这款游戏,而且打的很菜,被网友们戏称为「小学生」.现在,小皮球终于受不了网友们的嘲讽,决定变强了,他变强的方法就是:买皮肤! 小皮球只会玩N个英雄 ...

  9. WorldWind源码剖析系列:地形访问器类TerrainAccessor

    地形访问器类TerrainAccessor 地形访问器类TerrainAccessor提供了对地形(高程)Terrain (elevation)访问的各种接口interface,是NltTerrain ...

  10. 利用ngx_python模块嵌入到Python脚本

    导读 Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发. ...