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'
});
复制代码

 

写在后面

相关文章
|
4月前
|
JavaScript API
深入探索fs.WriteStream:Node.js文件写入流的全面解析
深入探索fs.WriteStream:Node.js文件写入流的全面解析
|
7月前
|
Web App开发 JavaScript 前端开发
【Node系列】文件系统介绍及案例说明
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,可以用于构建高性能的网络应用程序。它采用事件驱动、非阻塞I/O模型,使得程序可以以高效地方式处理并发请求。
71 4
|
2月前
|
JavaScript Unix API
Node.js 文件系统
10月更文挑战第6天
26 2
|
7月前
|
Web App开发 JavaScript 前端开发
Node.js 文件系统操作指南
Node.js 文件系统操作指南
123 0
|
3月前
|
存储 JSON JavaScript
学习node.js十三,文件的上传于下载
学习node.js十三,文件的上传于下载
|
4月前
|
JavaScript
NodeJs——如何下载文件
NodeJs——如何下载文件
96 4
|
4月前
|
机器学习/深度学习 JavaScript
node.js实现遍历所有文件夹里面的js文件,提取所有的url
node.js实现遍历所有文件夹里面的js文件,提取所有的url
|
4月前
|
资源调度 前端开发 JavaScript
前端 nodejs 命令行自动调用编译 inno setup 的.iss文件
前端 nodejs 命令行自动调用编译 inno setup 的.iss文件
|
5月前
|
移动开发 运维 JavaScript
阿里云云效操作报错合集之遇到Node.js的内存溢出问题,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
5月前
|
JavaScript Shell 应用服务中间件
阿里云云效操作报错合集之Node.js构建报错,该如何排查问题
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。