node基础-文件系统-文件写操作
2024-08-25 21:25:22
文件操作频率最高的就是读跟写。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'
});
写在后面
官方文档请点击
本文如有错漏,请指出 :)
最新文章
- Mariadb数据库设置及操作 一主多从 备份还原(实测笔记)
- React Native文件介绍
- 关于Java集合的小抄
- JUnit4 中@AfterClass @BeforeClass @after @before的区别对比
- console.log()与alert()的区别
- Greedy:Graveyard Design(POJ 2100)
- 3144:[HNOI2013]切糕 - BZOJ
- 预定义的类型“Microsoft.CSharp.RuntimeBinder.Binder”未定义或未导入
- iOS 强制横屏
- Python文件处理之文件打开方式(一)
- JavaEE Tutorials (24) - 资源适配器示例
- Registry Workshop(注册表编辑器) V4.6.3 官方中文版
- TCP的连接和建立 图解
- php.ini配置文件中的session配置
- Ajax配合vue+element打造个人专属loading
- JavaScript遍历集合(for...of/for...in/forEach)
- redis底层设计(五)——内部运作机制
- fluxion-wifi破解/钓鱼
- JS笔记汇总
- MarkDown常用语法表