Node的文件系统
FS(FileSystem):实现对文件的IO操作。
fs是Node的模块,需要导入。
var fs = require("fs");
1.同步和异步
同步:程序在涉及到文件IO时,必须等到文件IO操作结束后再执行后续的操作。
异步:程序再涉及到文件IO时,不等待文件IO操作结束,继续执行后续的操作,当文件IO操作结束后,系统会通知程序处理文件IO的结果。
2.回调是什么
所谓“回调”,即“回头调用”;“回调函数”是指函数定义后并不立即调用,而是等到某个事件被触发时再调用。
具有异步的特性。
3.fs模块的常用函数
(1)读文件
异步读文件:
readFile(filename,function(err,buffer){ //异步读取文件(非阻塞方式)
处理文件的代码
}):
“filename”:文件名(包含路径)
“function(err,buffer)”:回调函数,“err“存放的是读文件失败的信息;”buffer“存放的是文件的内容。
同步读文件:
readFileSync(filename,"utf8") //同步读文件,函数的返回值是一个字符串(文件内容)
第二个参数:用来指定字符集,如不指定则函数返回Buffer(一个缓冲区);若指定则返回字符串。
//1.导入fs模块
const fs = require("fs");
//2.异步读取
fs.readFile("input.txt",function(err,buf){
if(err){
return console.error(err);
}
console.log("异步读取文件",buf.toString())
})
console.log("2022")
//3.同步读取
let str = fs.readdirSync("./input.txt","utf-8")
console.log("同步读取文件",str);
console.log("2022")
(2)打开文件
open(path,flags[,mode],callback)
"path":文件名(包含路径)
"flags":打开文件的方式
--"r":以只读的方式打开文件,若文件不存在则报异常
--"w":为写打开文件,若文件不存在则创建文件
--"a":向文件中追加内容,若文件不存在则创建文件
--"rs":同步方式打开文件
"mode":设置文件模式,但前提是已创建该文件。它默认为0666,读取和写入。
"callback":这是回调函数,有两个参数(err, fd)。
const fs = require("fs");
//2.异步读取
// fs.readFile("input.txt",function(err,buf){
// if(err){
// return console.error(err);
// }
// console.log("异步读取文件",buf.toString())
// })
//
// console.log("2022")
//
// //3.同步读取
// let str = fs.readdirSync("input.txt","utf8")
// console.log("同步读取文件",str);
//
// console.log("2022")
fs.open("input.txt","r+",function(err,fd){
if(err){
return console.error(err)
}
console.log("fd:",fd)
console.log("打开文件成功")
})
(3)获取文件信息
获取文件信息:是一个对象,包含文件或目录(文件夹)的具体信息。通过该对象可以判断当前处理的是文件还是目录。
stat(path,function(err,states){
"err":存放的是打开文件异常时的错误信息
"states":文件的状态信息
})
(4)写入文件
fs.writeFile(filename, data[, options], callback) //异步写入
"filename":文件名
"data":向文件写入的内容,可以是字符串或者Buffer
"options":编码格式,可选参数
"callback":回调函数
const fs = require("fs");
//1.向input.txt中写入内容
fs.writeFile("input.txt","大唐不夜城",function(err){
if(err){
return console.error(err)
}
console.log("写入文件成功");
})
fs.writeFileSync(fileName, str, 'utf8'); //同步写入
(5)读取文件(以二进制的方式读取)
fs.read(fd, buffer, offset, length, position, callback)
"fd":是文件的描述符,由open函数返回
"buffer":被写入数据的缓冲区--存放从二进制文件中读取的内容
"offset":偏移量,指的是写入缓冲区的位置
"length":指要读取的字节数
"position":指的是从文件的什么位置开始读,默认从当前位置开始
"callback":回调函数
//读取二进制文件
const fs = require("fs");
let buf = new Buffer(1024);
fs.open("input.txt","r+",function(err,fd){
if(err){
return console.error(err)
}
console.log("打开文件成功!")
fs.read(fd,buf,0,buf.length,0,function(err,bytes){
if(err){
return console.error(err);
}
if(bytes > 0){
let str = buf.slice(0,bytes).toString();
console.log("读取的内容是:",str);
}
})
console.log("----End----");
})
(6)关闭文件
close(fd,callback)
let buf = new Buffer(1024);
fs.open("input.txt","r+",function(err,fd){
if(err){
return console.error(err)
}
console.log("打开文件成功!")
fs.read(fd,buf,0,buf.length,0,function(err,bytes){
if(err){
return console.error(err);
}
if(bytes > 0){
let str = buf.slice(0,bytes).toString();
console.log("读取的内容是:",str);
}
})
fs.close(fd,function(err){
if(err){
return console.error(err)
}
console.log("文件关闭成功!")
})
console.log("----End----");
})
(7)创建目录(文件夹)
fs.mkdir(path[, mode], callback)
"path":要创建的包括路径的目录名
"mode":目录的权限,默认是可读可写的
"callback":回调函数
const fs = require("fs");
fs.mkdir("./xian",function (err){
if(err){
return console.error(err)
}
console.log("创建目录成功!")
})
(8)删除目录
rmidr(path,callback)
const fs = require("fs");
fs.mkdir("./xian",function (err){
if(err){
return console.error(err)
}
console.log("创建目录成功!")
})
fs.rmdir("./text",function(err){
if(err){
return console.error(err)
}
console.log("删除成功!")
})
(9)读取目录
readdir(path,callback)
"path":目录名
"callback":回调函数,有两个参数(err,files),"files"是列表,放的是当前目录下的文件和文件夹的名称
const fs = require("fs");
fs.readdir("./xian",function(err,files){
if(err){
return console.error(err)
}
files.forEach(function(file){
console.log(file)
})
})
(10)文件复制
fs.copyFile(源文件,目标文件,回调函数)
const fs = require("fs");
fs.copyFile("./input.txt","./target.txt",function(err){
if(err){
return console.error(err)
}
console.log("文件拷贝成功!")
})
(11)给文件追加内容
给文件中追加内容:将内容添加到文件的末尾,若给定的文件不存在则创建文件,创建的新文件名就是给定的文件名
fs.appendFile(filename,content,callback)
"content":追加的内容
const fs = require("fs");
let content = "\n野火烧不尽,\n春风吹又生"
fs.appendFile("./input.txt",content,function(err){
if(err){
return console.error(err);
}
console.log("追加内容成功!")
})
(12)删除文件
fs.unlink(path,callback)
"path":带路径的文件名
"callback":回调函数,没有参数
const fs = require("fs");
fs.unlink("./target.txt",function(err){
if(err){
return console.error(err)
}
console.log("删除文件成功!")
})
(13)文件重命名
rename(oldPath,newPath,callback)
"oldPath":原文件名
"newPath":新文件名
"callback":回调函数
const fs = require("fs");
fs.rename("./input.txt","./test.txt",function(err){
if (err){
return console.error(err)
}
console.log("重命名成功!")
})