模块开发之Node.js内置模块fs基本使用(十三)
背景知识
模块fs
是node.js
内置的文件读取系统,是FileSystem
缩写,它是一个常见的api使用场景,不用研究过多的内容。
学习目标
目标是:会文件同步/异步读写api调用即可。
因为我这里只是开发前端场景使用,像创建目录,删除文件根本用不到。如果是开发后端的同学可以直接看这里Node.js 文件系统。学习更多的API。
引入模块
var fs = require("fs")
同步/异步读取文件API
input.txt
内容如下:
模块开发之Node.js内置模块fs基本使用(十三)
读取方式代码test.js
var fs = require("fs");
// 异步读取
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("异步读取: " + data.toString());
});
// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());
console.log("程序执行完毕。");
执行命令node test,
执行结果
同步读取: 模块开发之Node.js内置模块fs基本使用(十三)
程序执行完毕。
异步读取: 模块开发之Node.js内置模块fs基本使用(十三)
语法
异步读取readFile()
异步读取readFile()
语法,它有很好重载方法,具体可看API。
function readFile(path: PathLike | number,
options: { encoding?: string | null; flag?: string; } | string | undefined | null,
callback: (err: NodeJS.ErrnoException, data: string | Buffer) => void): void
path
:路径,可以是字符串,如’./input.txt
‘,可以是网络url,或Buffer缓存(读buffer需要配合open()
方法使用),但怎么使用number我也不知道。当然你只要会字符串路径即可
。
options
:是可选项,如果不填,后面的callback即做第二选项。可以指定编码格式,例子中使用了data.toString()
将16进制转成字符串,通常的做法是使用utf-8
编码。
callback
:回调函数,传入的回调函数接收两个参数,当正常读取时,err
参数为null
,data
参数为读取到的String
。当读取发生错误时,err参数代表一个错误对象,data为undefined。格式固定。
生产环境使用格式
var fs = require("fs");
var filePath = 'input.txt'
if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
// 异步读取
fs.readFile('input.txt', 'utf-8', function (err, data) {
if (err) {
return console.error(err);
}
console.log("异步读取: " + data);
});
}else{
//文件不存在处理
}
同步读取readFileSyncz()
同步读取readFileSyncz()
语法,同样,它也有很多重载方法,参数描述和上面一样。不同点就是,同步操作,必需等待返回值
function readFileSync(path: PathLike | number, options: { encoding: string; flag?: string; } | string): string
生产环境格式
var fs = require("fs");
var filePath = 'input.txt'
if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
// 异步读取
fs.readFileSync('input.txt', 'utf-8');
}else{
//文件不存在处理
}
同步/异步写入文件
这也是常用的api。
例子
var fs = require("fs");
var filePath = 'input.txt'
//同步写入
fs.writeFileSync(filePath , '模块开发之Node.js内置模块fs基本使用(十三)', 'utf8')
//异步写入
fs.writeFile(filePath , '模块开发之Node.js内置模块fs基本使用(十三)', 'utf8')
语法
同步写入writeFileSync()
语法
function writeFileSync(path: PathLike | number, data: any, options?: { encoding?: string | null; mode?: number | string; flag?: string; } | string | null): void
options
是可选参数,encoding
是编码方式,一般是utf-8
。model设置文件模式(权限),文件创建默认权限为 0666
(可读,可写)。flag标识,默认是r
(以读取模式打开文件。如果文件不存在抛出异常)。
异步writeFile()
语法
function writeFile(path: PathLike | number, data: any, options: { encoding?: string | null; mode?: number | string; flag?: string; } | string | undefined | null, callback: (err: NodeJS.ErrnoException) => void): void
path
:文件名或文件描述符。
data
:要写入文件的数据,可以是 String(字符串) 或 Buffer(流) 对象。
options
:该参数是一个对象,包含 {encoding, mode, flag}
。默认编码为 utf8
, 模式为 0666
, flag 为 ‘w’
callback
:回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。
生产环境格式
var fs = require("fs");
var filePath = 'input.txt'
//同步写入
fs.writeFileSync(filePath , '模块开发之Node.js内置模块fs基本使用(十三)', 'utf8')
//异步写入
fs.writeFile(filePath , '模块开发之Node.js内置模块fs基本使用(十三)', 'utf8')
总结
会读写基本操作即可,文件系统本身全身范围并不大,有时候系统成熟了,根本不需要你亲自去写,大部分精力在读别人写的代码。所以,目标是熟悉即可。
Node.js
上有比较全面的参考文档,Node.js 文件系统。