文件模块系统
- 文件系统属于nodejs原生自带的api,使用的时候需要导入才可以已使用
- 但凡是模块 都需要导入,可以直接导入也可以下载非官方的第三方模块进行导入
require可以传入路径字符串,代表导入引入的意思
-
xx.js代表导入一个文件 如果参数是非路径字符串,而是一个普通的名字
-
这个名字代表的就是一个模块
使用require两种情况
- 要导入文件,写文件路径
-
要导入模块,写模块名称
导入fs模块:
fs:file system文件管理系统模块 提供了操作文档的功能(创建.删除,复制粘贴...)
var fs = require("fs");
写入文件:
fs.writeFilesync(); 同步
-
写入一个文件 writeFileSync(同步写入一个文件,要求在写入的过程中其他进程需要等待写入完成才可以执行) 数据无价
-
绝对路径:直接可以根据当前路径准确找到文件
-
相对路径:相对于这个文件来说,路径中的某一部分是咱是不固定的
fs.writeFileSync("./123.txt","这个知识点很重要,很多游戏的计分板就是通过写入数据到本地文件实现的");
- writeFile方法与writeFileSync用于一样都是把一段文本写入到文件中
fs.writeFile(); 异步
-
第一个参数为写入的文件
-
第二个为写入的内容
-
第三个为写入之后的回调函数
-
回调函数:当任务完成之后,如果写入出错程序会把此次写入的错误信息返回给我 error参数
fs.writeFile("./123.txt", "嘿嘿???", function (error) {
if (error) {
/*
error包含有错误的所有信息,比如路径拼错
假如是网络请求的error那么说明此次此次请求成功但是服务器
觉得请求的不对,所以返回的错误
*/
console.log(error);
} else {
console.log("成功");
//如果文件存在那么代表更新内容
// 如果文件不存在则先创建文件在添加内容
}
});
同步:代码占用主线程,是阻塞状态,直到任务完成之后才会打开阻塞
异步:分线程,任务是在后台执行,不会阻塞当前代码,当前代码立刻向下执行所以异步函数一般都会有一个回调函数,当异步完成的时候回调函数触发,查看当前的状态;
文件操作为什么会有异步?
文件操作在写入的时候,耗时不确定,磁盘的写入速度,文件的大小都会影响到本次任务的耗时,如果使用同步,容易造成现成堵塞,反映到程序上就是会出现卡顿,一般遇到这种需求,都建议使用异步函数,避免现成卡顿
定时器是一个异步函数
setTimeout(() => {
}, 10);
console.log(); // 优先执行log,可见是异步函数
读取文件:
fs.readFileSync(); 同步
参数是文件的路径 返回的是文件里面的内容
var content = fs.readFileSync("./123.txt");
读取到的内容不是字符串,而是原始的数据buffer
buffer是一个数据对象,带有转字符串的方法toString();
console.log(content.toString());
fs.readFile(); 异步
第一个参数是文件路径 第二个参数是此次读取文件的回调(有两个参数第一个参数是错误信息对象 第二个参数是读取到的内容)
fs.readFile("./123.txt", function (err, data) {
if (err) {
console.log(err);
} else {
console.log(data.toString());
}
});
创建文件夹 makeDirectory:
- 第一个参数是文件夹路径 如果有文件夹则不会再创建
- 第二个参数是回调函数 创建成功或者创建失败都会回调
fs.mkdir("./abc", function (err) {
if (err) {
console.log("失败");
} else {
console.log("成功");
}
});
复制文件:
- 1.要复制的文件位置
- 2.复制到哪的文件位置
- 3.回调
fs.copyFile("./123.txt", "./abc/456.txt", function (err) {
if (err) {
console.log("复制文件失败");
} else {
console.log("复制文件成功");
}
});
删除:
fs.unlink("./abc/456.txt", function (err) {
if (err) {
console.log("删除文件失败");
} else {
console.log("删除文件成功");
}
});