文章目录
- ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘
- 前言
- NODE内置模块
- FS模块
- CallBack API
- mkdir (创建文件夹 异步)
- rmdir(删除文件夹 异步)
- rm(删除文件和目录 异步)
- rename(文件夹改名 异步)
- writeFile(写内容到文件里 异步)
- appendFile(给文件追加内容 异步)
- readFile(读取文件内容 异步)
- unlink(删除文件 异步)
- readdir(读取文件/目录信息 异步)
- stat(判断文件的类型 异步)
- Stream流
- createReadStream(可读流 异步)
- createWriteStream(可写流 异步)
- pipe(Readable方法 异步)
- 总结
✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘
⡖⠒⠒⠒⠤⢄⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸ ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀⠈⠃⠀⠀⡗⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀ ⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
⠀⠙⣌⠳⣄⠀⡇ 不能 ⡏⠀⠀ ⠈⠳⡌⣦⠀⠀⠀⠀
⠀⠀⠈⢳⣈⣻⡇ 白嫖 ⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽
前言
Node.js
是一个javascript运行环境。它让javascript可以开发后端程序
,实现几乎其他后端语言实现的所有功能,可以与```PHP、Java、Python、.NET、Ruby等后端语言平起平坐。- Nodejs是基于V8引擎,V8是Google发布的开源JavaScript引擎,本身就是用于Chrome浏览器的JS解释,但是Node之父
Ryan Dahl
把这V8搬到了服务器上,用于做服务器的软件。
NODE内置模块
FS模块
Node : https://nodejs.cn/api/fs.html
作用:文件操作
CallBack API
mkdir (创建文件夹 异步)
mkdir (创建文件夹 异步)
- 语法:fs.mkdir(path[, options(
recursive
:是否应创建父目录)], callback)
代码
const fs = require("fs")
//创建目录
fs.mkdir("./A/AA/AAA", { recursive: true }, (err) => {
console.log(err)
//如果有第二个参数 测err为空,否者是一个对象
if (err && err.code === "EEXIST") {
console.log("目录已经存在")
}
})
rmdir(删除文件夹 异步)
rmdir(删除文件夹 异步)
- 语法:fs.rmdir(path[, options], callback)
代码
const fs = require("fs")
fs.rmdir("./A", err => {
if (err && err.code === "ENOENT") {
console.log("目录不存在")
}
console.log(err)
})
rm(删除文件和目录 异步)
rm(删除文件 异步)
- 语法:fs.rm(path[, options], callback)
代码
// path <string> | <Buffer> | <URL>
// options <Object>
// force <boolean> 当为 true 时,如果 path 不存在,则异常将被忽略。 默认值: false。
// recursive <boolean> 如果为 true,则执行递归删除。 在递归模式下,操作将在失败时重试。 默认值: false。
// retryDelay <integer> 重试之间等待的时间(以毫秒为单位)。 如果 recursive 选项不为 true,则忽略此选项。 默认值: 100。
// callback <Function>
// err <Error></Error>
fs.rm("./A", { force: true, recursive: true, retryDelay: 5000 }, err => {
if (err && err.code === "ENOENT") {
console.log("目录不存在")
}
console.log(err)
})
rename(文件夹改名 异步)
rename(文件夹改名 异步)
- 语法:fs.rename(path[, options], callback)
代码
// oldPath <string> | <Buffer> | <URL>
// newPath <string> | <Buffer> | <URL>
// callback <Function>
// err <Error></Error>
const fs = require("fs")
fs.rename("./A2/AA/AAA", "./A2/AA/A2", (err) => {
if (err && err.code === "ENOENT") {
console.log("目录不存在")
}
console.log(err);
})
writeFile(写内容到文件里 异步)
writeFile(写内容到文件里 异步)
- 语法:fs.writeFile(file, data[, options], callback)
代码
// file <string> | <Buffer> | <URL> | <integer> 文件名或文件描述符
// data <string> | <Buffer> | <TypedArray> | <DataView> | <Object>
// options <Object> | <string>
// encoding <string> | <null> 默认值: 'utf8'
// mode <integer> 默认值: 0o666
// flag <string> 请参阅对文件系统 flags 的支持。 默认值: 'w'。
// signal <AbortSignal> 允许中止正在进行的写入文件
// callback <Function>
// err <Error> | <AggregateError>
const fs = require("fs")
fs.writeFile("./A/AA/AAA/a.txt", "你好", { encoding: "utf-8", flag: 'w' }, err => {
console.log(err)
})
appendFile(给文件追加内容 异步)
appendFile(给文件追加内容 异步)
- 语法:fs.appendFile(path, data[, options], callback)
代码
// path <string> | <Buffer> | <URL> | <number> 文件名或文件描述符
// data <string> | <Buffer>
// options <Object> | <string>
// encoding <string> | <null> 默认值: 'utf8'
// mode <integer> 默认值: 0o666
// flag <string> 请参阅对文件系统 flags 的支持。 默认值: 'a'。
// callback <Function>
// err <Error>
const fs = require("fs")
fs.appendFile("./A/AA/AAA/aw.txt", "\nhello world", err => {
console.log(err)
})
readFile(读取文件内容 异步)
readFile(读取文件内容 异步)
- 语法:fs.readFile(path[, options], callback)
代码
玩法一
// path <string> | <Buffer> | <URL> | <integer> 文件名或文件描述符
// options <Object> | <string>
// encoding <string> | <null> 默认值: null
// flag <string> 请参阅对文件系统 flags 的支持。 默认值: 'r'。
// signal <AbortSignal> 允许中止正在进行的读取文件
// callback <Function>
// err <Error> | <AggregateError>
// data <string> | <Buffer>
const fs = require("fs")
fs.readFile("./A/AA/AAA/a.txt",(err,data)=>{
if(!err){
console.log(data.toString("utf-8"))
}
})
fs.readFile("./A/AA/AAA/a.txt", "utf-8", (err, data) => {
if (!err) {
console.log(data)
}
})
玩法二
const fs = require("fs").promises
fs.readFile("./A/AA/AAA/a.txt", "utf-8").then(data => {
console.log(data)
})
玩法三
const fs = require("fs").promises
fs.readdir("./A/AA/AAA").then(async (data) => {
let arr = []
await Promise.all(data.map(item => {
fs.unlink(`./A/AA/AAA/${item}`)
}))
await fs.rmdir("./A/AA/AAA")
})
unlink(删除文件 异步)
unlink(删除文件 异步)
- 语法:fs.unlink(path, callback)
代码
// path <string> | <Buffer> | <URL>
// callback <Function>
// err <Error>
const fs = require("fs")
fs.unlink("./A/AA", err => {
console.log(err)
})
readdir(读取文件/目录信息 异步)
readdir(读取文件/目录信息 异步)
- 语法:fs.readdir(path[, options], callback)
代码
// path <string> | <Buffer> | <URL>
// options <string> | <Object>
// encoding <string> 默认值: 'utf8'
// withFileTypes <boolean> 默认值: false 设置为 true,则 files 数组将包含 <fs.Dirent> 对象。
// callback <Function>
// err <Error>
// files <string[]> | <Buffer[]> | <fs.Dirent[]>
const fs = require("fs")
fs.readdir("./A2/AA/A2", (err, data) => {
if (!err) {
console.log(data)
}
})
stat(判断文件的类型 异步)
stat(判断文件的类型 异步)
- 语法:fs.stat(path[, options], callback)
代码
// path <string> | <Buffer> | <URL>
// options <Object>
// bigint <boolean> 返回的 <fs.Stats> 对象中的数值是否应为 bigint。 默认值: false。
// callback <Function>
// err <Error>
// stats <fs.Stats>
const fs = require("fs")
fs.stat("./A2/AA", (err, data) => {
console.log(data.isFile())
console.log(data.isDirectory())
})
Stream流
-
说明:
stream
是Node.js提供的又一个仅在服务区端可用的模块,目的是支持“流”这种数据结构。 -
什么是流❓: 流是一种抽象的数据结构。想象水流,当在水管中流动时,就可以从某个地方(例如自来水厂)源源不断地到达另一个地方(比如你家的洗手池)。我们也可以把数据看成是数据流,标准输入流(stdin)。
createReadStream(可读流 异步)
createReadStream(可读流 异步)
- 语法:fs.createReadStream(path[, options])
代码
const fs = require("fs")
const rs = fs.createReadStream("./1.txt", "utf-8")
rs.on("data", (chunk) => {
console.log("chunk-", chunk) //读取
})
rs.on("end", () => {
console.log("end") //结束
})
rs.on("error", (err) => { //出错
console.log(err)
})
注意
: data
事件可能会有多次,每次传递的 chunk
是流的一部分数据。
注意
:要以流的形式写入文件,只需要不断调用write()
方法,最后以end()
结束
createWriteStream(可写流 异步)
createWriteStream(可写流 异步)
- 语法:fs.createWriteStream(path[, options])
代码
const fs = require("fs")
const ws = fs.createWriteStream("./2.txt", "utf-8")
ws.write("写入文件!")
ws.end()
pipe(Readable方法 异步)
说明:pipe 就像可以把两个水管串成一个更长的水管一样,两个流也可以串起来。一个Readable 流
和一个Writable 流
串起来后,所有的数据自动从Readable 流进入Writable 流,这种操作叫pipe 。
pipe 把两个水管串成一个更长的水管一样
- 语法:readStream.pipe(writeStream)
代码
//确保读取的文件写入到文件中
const fs = require("fs")
const readStream = fs.createReadStream("./1.txt")
const writeStream = fs.createWriteStream("./2.txt")
readStream.pipe(writeStream)
总结
以上是个人学习Node的相关知识点,一点一滴的记录了下来,有问题请评论区指正,共同进步,这才是我写文章的原因之,如果这篇文章对您有帮助请三连支持一波