终于有点时间学习啦,今天是美好的周六,早上早起去了一趟健身房,然后去喝了免费的霸王茶姬!万里木兰很不错,推荐。又要开始学习啦,家人们,学习永无止境!!!
之前学的node也忘得差不多了,而且感觉学的不扎实,因为学了就忘,表明自己没有真正的理解到,所以要来一次0到1的学习😗😎。
夏天终于来了,好热好热。
这一篇拖了好久了因为最近工作真的太忙碌了,每天回家累的不行只想睡觉!
首先,我们要清楚一个概念,nodejs并不是一种编程语言,官方的说法是: Nodejs是一个开源的,跨平台的JavaScript运行环境
Nodejs的作用
命令行
命令的结构:
常用命令:
小结:
嗯这就是比较基本的命令行,如果是dir /s那就是输出这个文件夹下的所有文件(包括子目录)
Nodejs注意事项
在nodejs中不能使用DOM和BOM的api
在浏览器中的JavaScript
nodejs中的JavaScript
像这些都是不可以的
但是可以使用global和globalThis顶级对象
计算机基本知识
下面老师又介绍了一些计算机的基础知识,比如一个软件运行的基本流程。
进程和线程
fs模块
fs是file system的简称,意为文件系统,这是nodejs中比较重要的模块,现在我们来学习一下
文件操作
writeFile(异步)
首先我们创建一个文件
const fs = require("fs");
fs.writeFile("./iWrite", "这是我添加的内容", (err) => {
if (err) {
console.log("写入失败");
return;
} else {
console.log("写入成功");
}
});
OK这就写入成功了,如果再次执行,会覆盖之前的内容
writeFileSync(同步)
既然前面的writeFile是异步的,那么也有相应的同步方法,并且这个方法是没有回调函数的
const fs = require("fs");
fs.writeFileSync("./test", "同步写入");
前面的方法会直接覆盖掉文件中的内容,下面的方法是追加写入:
appendFile(异步)
const fs = require("fs");
fs.appendFile("./iWrite", "这是追加的内容", (err) => {
if (err) {
console.log(err);
} else {
console.log("写入成功");
}
});
执行后:
其实前面的writeFile也可以实现追加,但是要添加配置flag为"a"
const fs = require("fs");
fs.writeFile(
"./iWrite",
"\r\n这是writeFile方法追加的内容",
{
flag: "a",
},
(err) => {
if (err) {
console.log(err);
} else {
console.log("写入成功");
}
}
);
追加的操作可以用于日志
createWriteStream流式写入
const fs = require("fs");
const ws = fs.createWriteStream("./日记");
ws.write("2/1 今天 xxxx \n");
ws.write("2/2 ...xxxx \n");
ws.write("2/3 ...xxxx \n");
ws.write("2/4 ...xxxx \n");
ws.close(); // 可加可不加
文件写入的场景
文件读取
readFile
这个接收三个参数,其中回调函数接收error和读取到的数据,这个数据是一个buffer类型,可以使用toString转成字符。
const fs = require("fs");
fs.readFile("./日记", (err, data) => {
if (err) {
throw Error(err);
} else {
console.log("成功读取");
console.log(data.toString());
}
});
文件读取的场景
流式读取
流式读取就是将内容一块一块的读取,每读取一块都会执行一次回调函数
const fs = require("fs");
const rs = fs.createReadStream("../dic/img.png");
rs.on("data", (chunk) => {
console.log(chunk);
});
复制文件
方式一:
const fs = require("fs");
const data = fs.readFileSync("../dic/setup.exe");
fs.writeFileSync("../dic/setup-2.exe", data);
方式二:流式
// 流式读取复制
const fs = require("fs");
const rs = fs.createReadStream("../dic/setup.exe");
const ws = fs.createWriteStream("../dic/setup-3.exe");
rs.on("data", (chunk) => {
ws.write(chunk);
});
可以看到都是可以的
还有一种方式是比较少见的
rs.pipe(ws)
文件的重命名和移动
rename(原路径,新路径,回调函数)
// 重命名
const fs = require("fs");
fs.rename("./h.txt", "./hhh.txt", (err) => {
if (err) {
console.log(err);
return;
} else {
console.log("重命名成功");
}
});
// 移动
const fs = require("fs");
fs.rename("./hhh.txt", "../dic/hhhh.txt", (err) => {
if (err) {
console.log(err);
return;
} else {
console.log("移动成功");
}
});
删除文件
unlink(删除路径,回调函数)
const fs = require("fs");
fs.unlink("./test", (err) => {
if (err) {
console.log("删除失败");
return;
} else {
console.log("删除成功");
}
});
rm(删除路径,回调函数)
const fs = require("fs");
fs.rm("./日记", (err) => {
if (err) {
console.log("删除失败");
return;
} else {
console.log("删除成功");
}
});
文件夹操作
创建文件夹
const fs = require("fs");
fs.mkdir("./newDic", (err) => {
if (err) {
console.log(err);
return;
} else {
console.log("创建成功");
}
});
还可以递归创建,需要多加一个属性
const fs = require("fs");
fs.mkdir("./a/b/c", { recursive: true }, (err) => {
if (err) {
console.log("创建失败");
return;
} else {
console.log("创建成功");
}
});
读取文件夹
readdir(文件夹路径, 回调函数(错误, 返回的文件名))
const fs = require("fs");
fs.readdir("../dic", (err, file) => {
if (err) {
console.log(err);
return;
} else {
console.log(file);
}
});
删除文件夹
rmdic(文件路径, 回调函数)
const fs = require("fs");
fs.readdir("../dic", (err, file) => {
if (err) {
console.log(err);
return;
} else {
console.log(file);
}
});
当然删除也有递归删除
const fs = require("fs");
fs.rmdir("./a", { recursive: true }, (err) => {
if (err) {
console.log("删除失败");
} else {
console.log("删除成功");
}
});
但是终端显示rmdir的递归删除会被遗弃,不推荐使用,推荐我们使用rm的方法
fs.rm("./a", { recursive: true }, (err) => {
if (err) {
console.log(err);
} else {
console.log("删除成功");
}
});
查看资源状态
stat方法
const fs = require("fs");
fs.stat("./hello.js", (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
其中还有两个方法,可以判断这个资源是文件还是文件夹
分别是 isFile()和isDirectory()
const fs = require("fs");
fs.stat("./hello.js", (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data.isFile()); // true
console.log(data.isDirectory()); // false
}
});
绝对路径
__dirname保存的是所在的文件的所在目录的绝对路径
注意看要怎么写才对
批量重命名
一定要注意,文件中的路径,都是相对于终端来说的,千万不要写错
总结:
文件读取顾名思义,就是通过程序从文件中取出其中的数据,我们可以使用如下几种方式:
方法 | 说明 |
---|---|
readFile | 异步读取 |
readFileSync | 同步读取 |
createReadStream | 流式读取 |
语法: fs.readFile(path[, options], callback)
参数说明:
返回值:undefined
语法: fs.readFileSync(path[, options])
参数说明:
返回值:string | Buffer
本文由“壹伴编辑器”提供技术支持
语法: fs.createReadStream(path[, options])
参数说明:
返回值:Object
本文由“壹伴编辑器”提供技术支持
文件写入就是将 数据 保存到 文件 中,我们可以使用如下几个方法来实现该效果
方法 | 说明 |
---|---|
writeFile | 异步写入 |
writeFileSync | 同步写入 |
appendFile /appendFileSync | 追加写入 |
createWriteStream | 流式写入 |
语法: fs.writeFile(file, data[, options], callback)
参数说明:
返回值:undefined
本文由“壹伴编辑器”提供技术支持
语法: fs.writeFileSync(file, data[, options])
参数与 fs.writeFile 大体一致,只是没有 callback 参数
返回值:undefined
本文由“壹伴编辑器”提供技术支持
appendFile 作用是在文件尾部追加内容,appendFile 语法与 writeFile 语法完全相同 语法:
fs.appendFile(file, data[, options], callback)
fs.appendFileSync(file, data[, options])
返回值:二者都为 undefined
本文由“壹伴编辑器”提供技术支持
语法: fs.createWriteStream(path[, options])
参数说明:
返回值:Object
本文由“壹伴编辑器”提供技术支持
在 Node.js 中,我们可以使用 rename 或 renameSync 来移动或重命名 文件或文件夹 语法:
fs.rename(oldPath, newPath, callback)
fs.renameSync(oldPath, newPath)
参数说明:
本文由“壹伴编辑器”提供技术支持
在 Node.js 中,我们可以使用 unlink 或 unlinkSync 来删除文件 语法:
fs.unlink(path, callback)
fs.unlinkSync(path)
参数说明:
本文由“壹伴编辑器”提供技术支持
借助 Node.js 的能力,我们可以对文件夹进行 创建 、 读取 、 删除 等操作
方法 | 说明 |
---|---|
mkdir / mkdirSync | 创建文件夹 |
readdir / readdirSync | 读取文件夹 |
rmdir / rmdirSync | 删除文件夹 |
在 Node.js 中,我们可以使用 mkdir 或 mkdirSync 来创建文件夹 语法:
fs.mkdir(path[, options], callback)
fs.mkdirSync(path[, options])
参数说明:
本文由“壹伴编辑器”提供技术支持
在 Node.js 中,我们可以使用 readdir 或 readdirSync 来读取文件夹 语法:
fs.readdir(path[, options], callback)
fs.readdirSync(path[, options])
参数说明:
本文由“壹伴编辑器”提供技术支持
在 Node.js 中,我们可以使用 rmdir 或 rmdirSync 来删除文件夹 语法:
fs.rmdir(path[, options], callback)
fs.rmdirSync(path[, options])
本文由“壹伴编辑器”提供技术支持
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有