fs主要是读文件和写文件用的,用途非常广法也非常方便,也是系统自带的文件类型操作的模块。
Node.js中文文档:http://nodejs.cn/api/fs.html
1.fs文件模块导入
//导入文件模块
let fs = require("fs");
2.文件读取
读写文件也分为同步和异步。
创建本地文件hello.txt
,注:保存时设置编码为utf-8。
-
同步(会等待或阻塞)
//同步
var txt = fs.readFileSync('hello.txt',{flag:'r',encoding:'utf-8'})
console.log(txt);
-
异步(常用)
//异步
fs.readFile('hello.txt',{flag:'r',encoding:'utf-8'},function(err,data){
if(err){
console.log(err);
}else{
console.log(data);
}
})
//Promise封装
function readFs(path) {
return new Promise(function (resolve,reject) {
fs.readFile(path,{flag:'r',encoding:'utf-8'},function(err,data){
if(err){
//失败
reject(err)
}else{
//成功
resolve(data)
}
})
})
}
//调用
readFs('hello.txt').then(res =>{
console.log(res);
})
//or(避免连续回调)
async function ReadFs(){
var hello = await readFs('hello.txt')
console.log(hello);
}ReadFs()
3.文件写入
与文件读取相似,文件写入也有同步与异步之分。
依旧使用之前的Hello.txt
文件。
-
同步
//同步(会等待或阻塞)
fs.writeFileSync('hello.txt','今天天气不错!',{flag:'w',encoding:'utf-8'})
-
异步
//异步
fs.writeFile('hello.txt','今天天气不错!',{flag:'w',encoding:'utf-8'},function(err){
if(err){
console.log('写入出错!');
}else{
console.log('写入成功!');
}
})
//Promise封装
function writeFs(path,content,flag) {
return new Promise(function (resolve,reject) {
fs.writeFile(path,content,{flag:flag,encoding:'utf-8'},function(err){
if(err){
//失败
reject('写入出错!')
}else{
//成功
resolve('写入成功!')
}
})
})
}
// 调用
writeFs('hello.txt','今天天气不错!','w').then(res =>{
console.log(res);
})
//or(避免连续回调,可按顺序写入)
async function WriteFs(){
await writeFs('hello.txt','今天天气不错!\n','w');
await writeFs('hello.txt','今天星期五了!\n','a');
await writeFs('hello.txt','但是我还不放假!\n','a');
await writeFs('hello.txt','悲伤!','a');
}WriteFs()
注:当参数flag:'w'
的时候,写入的内容会将原来的内容覆盖。
如果不想要写入内容覆盖原来内容,将flag:'w'
设置为flag:'a'
即可。
4.文件删除
//谨慎操作,删除后文件可能无法恢复哟
fs.unlink('hello.txt',function () {
console.log('删除成功!');
})
5.目录
// 读取目录
//可以通过循环读取的目录数组,使用文件读取和文件写入的功能实现所有目录文件中内容的整合等功能。
fs.readdir('../fs--文件系统',function (err,files) {
if(err){
console.log('读取出错:'+err);
}else{
console.log('读取成功:'+files);
}
})
// 删除目录
//谨慎操作,删除后文件可能无法恢复
fs.rmdir('../fs',function () {
console.log('删除目录成功!');
})
6.buffer(缓存)--理解
buffer
用于在内存空间开辟出固定大小的内存。
var txt = '你好,node.js'
var buf = Buffer.from(txt)
console.log(buf);
打印输出十六进制
的字符
// 将内容从缓存区提取出来,使用toString即可
console.log(buf.toString());
附上flag常用标志:
以下标志在 flag
选项接受字符串的任何地方可用。(默认为r
)
-
'a'
: 打开文件进行追加。 如果文件不存在,则创建该文件。 -
'ax'
: 类似于'a'
但如果路径存在则失败。 -
'a+'
: 打开文件进行读取和追加。 如果文件不存在,则创建该文件。 -
'ax+'
: 类似于'a+'
但如果路径存在则失败。 -
'as'
: 以同步模式打开文件进行追加。 如果文件不存在,则创建该文件。 -
'as+'
: 以同步模式打开文件进行读取和追加。 如果文件不存在,则创建该文件。 -
'r'
: 打开文件进行读取。 如果文件不存在,则会发生异常。 -
'r+'
: 打开文件进行读写。 如果文件不存在,则会发生异常。 -
'rs+'
: 以同步模式打开文件进行读写。 指示操作系统绕过本地文件系统缓存。 -
'w'
: 打开文件进行写入。 创建(如果它不存在)或截断(如果它存在)该文件。 -
'wx'
: 类似于'w'
但如果路径存在则失败。 -
'w+'
: 打开文件进行读写。 创建(如果它不存在)或截断(如果它存在)该文件。 -
'wx+'
: 类似于'w+'
但如果路径存在则失败。 -
'r+'
标志打开现有的隐藏文件进行写入。
今天天气确实不错,但是单休的码农心情并不美丽,因为明天要上班,努力搬砖吧!
日期:2021/11/12
学习参考视频:https://www.bilibili.com/video/BV1i7411G7kW?p=4&t=6.7