Node.js的学习总结(三)
2019-12-16 本文已影响0人
追逐_chase
node.jpeg
fs文件模块
- 需要手动导入才可以使用
//1.导入文件模块
let fs = require("fs");
- 查看文件的状态
fs.stat(path[, options], callback)
异步方法
同步方法
fs.statSync(path[, options])
返回的就是一个 stats的状态
fs.stat(__filename,function (err,stats) {
// 获取错误
console.log("err---",err);
//获取成功的状态
console.log("stats---",stats);
//birthtime 文件的创建时间
//mtime 文件的修改时间
if (stats.isFile()){
console.log("当前对应的是一个文件");
}else if (stats.isDirectoty) {
console.log("当前路径对应的是一个文件夹");
}
});
console.log("2");
image.png
2.文件的读取
- fs.readFile(path[, options], callback) 异步方法
- fs.readFileSync(path[, options]) 同步方法
//1导入文件模块
let fs = require("fs");
//导入路径模块
let path = require("path");
// __dirname 绝对路径文件夹
// join 拼接路径
let filePath = path.join(__dirname,"data.txt");
//2.读取文件
fs.readFile(filePath,"utf8",function (err,data) {
//注意,如果 第二个参数utf8 不传递的话,返回的就是二进制数据
// 传递的话就返回的事-字符串
if (!err){
//读取成功后,获取的是二进制数据
console.log("读取成功",data);
}else {
console.log("读取失败",err);
}
});
- 写入文件 数据
fs.writeFile(file, data[, options], callback)
异步方法fs.writeFileSync(file, data[, options])
同步方法
//导入文件模块
let fs = require("fs");
//导入路径模块
let path = require("path");
//拼接路径
let filePath = path.join(__dirname,"cc.txt");
// 异步 写入数据
//参数一:写入的文件路径
//参数二:写入的内容
//参数三:编码方式
//参数四:失败的回调
fs.writeFile(filePath,"我是CC","utf8",function (err) {
console.log(err);
if (err){
throw new Error("写入失败");
}else {
console.log("写入成功");
}
});
//同步写入数据
let fileSyncPath = path.join(__dirname,"Sync.txt");
let res = fs.writeFileSync(fileSyncPath,"同步写入数据","utf8");
console.log(res);
- 向文件中,添加心的数据
fs.appendFile(path, data[, options], callback)
fs.appendFileSync(path, data[, options])
//导入文件模块
let fs = require("fs");
//导入路径模块
let path = require("path");
//拼接路径
let filePath = path.join(__dirname,"data.txt");
// 异步 向文件中添加数据
fs.appendFile(filePath,"\n添加一个字符串数据","utf8",function (err) {
console.log(err);
});
- 大文件操作数据
分批读取
和分批写入
fs.createReadStream(path[, options])
分批读取
// 1.分批读取数据
// 导入模块
let fs = require("fs");
let path = require("path");
//获取文件路径
let filePath = path.join(__dirname,"data.txt");
//创建一个读取流
//参数二:是一个配合对象
/**
* encoding: 编码的方式(默认是null)
*
* highWaterMark:每次读取的多少 默认是64kb
*
*/
let readStream = fs.createReadStream(filePath,{
encoding:"utf8",
highWaterMark:1
});
//监听添加的事件
readStream.on("open",function () {
console.log("表示数据流和文件建立关系成功");
});
readStream.on("error",function () {
console.log("表示数据流和文件建立关系失败");
});
readStream.on("data",function (data) {
console.log("表示通过读取流从文件中读取到了数据", data);
});
readStream.on("close",function () {
console.log("表示数据流断开了和文件的关系, 并且数据已经读取完毕了");
});
fs.createWriteStream(path[, options])
分批写入
let fs = require("fs");
let path = require("path");
//创建一个文件路径
let writeFilePath = path.join(__dirname,"write.txt");
//创建写入流
let writeSream = fs.createWriteStream(writeFilePath,{
encoding:"utf8",
});
// 监听写入流的事件
writeSream.on("open", function () {
console.log("表示数据流和文件建立关系成功");
});
writeSream.on("error", function () {
console.log("表示数据流和文件建立关系失败");
});
writeSream.on("close", function () {
console.log("表示数据流断开了和文件的关系");
});
let data = "www.ezcarry.com";
let index= 0;
let timer = setInterval(function () {
let str = data[index];
index ++;
//写入数据
console.log(str);
writeSream.write(str);
if (index === data.length){
//结束写入数据
writeSream.end();
clearInterval(timer);
}
},3000);
6.操作文件目录
fs.mkdir(path[, mode], callback)
创建文件目录- fs.mkdirSync(path[, mode])
//导入模块
let fs = require("fs");
let path = require("path");
//拼接路径
let str = path.join(__dirname,"abc");
//1.创建文件目录
fs.mkdir(str,function (err) {
if (err){
throw new Error("创建错误");
} else {
console.log("创建成功");
}
});
// 2.移除文件目录
fs.rmdir(str,function (err) {
if (err){
throw new Error("移除文件失败");
} else {
console.log("删除目录成功");
}
});
//3.读取文件目录
fs.readdir(__dirname,function (err,files) {
if (err){
throw new Error("读取文件目录失败");
} else {
//files是一个数组
files.forEach(function (obj) {
let filePath = path.join(__dirname,obj);
let stats = fs.statSync(filePath);
if (stats.isFile()){
console.log("是一个文件",obj);
}else if (stats.isDirectory()){
console.log("是一个文件目录",obj);
}
});
}
});
创建 结构目录层次
//导入模块
let fs = require("fs");
let path = require("path");
//创建一个类
class CreateProject {
constructor(rootPath,projectName){
this.rootPath = rootPath;
this.projectName = projectName;
this.subFiles = ["images","css","js","index.html"];
}
initProject(){
//1.创建站点文件夹
let projectPath = path.join(this.rootPath,this.projectName);
//同步创建站点文件目录
fs.mkdirSync(projectPath);
//2.创建子目录和文件
this.subFiles.forEach(function (item) {
if (path.extname(item) === "") {
let dirPath = path.join(projectPath,item);
fs.mkdirSync(dirPath);
}else {
let filePath = path.join(projectPath,item);
fs.writeFileSync(filePath);
}
});
}
}
let cp = new CreateProject(__dirname,"Ezcarry");
cp.initProject();
image.png