模块开发之Node.js内置模块fs基本使用(十三)

模块开发之Node.js内置模块fs基本使用(十三)

背景知识

模块fsnode.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参数为nulldata参数为读取到的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 文件系统

猜你喜欢

转载自blog.csdn.net/achenyuan/article/details/80909415