Web

Node.js的学习总结(三)

2019-12-16  本文已影响0人  追逐_chase
node.jpeg

fs文件模块

//1.导入文件模块
let fs = require("fs");
  1. 查看文件的状态 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);
    }

});
  1. 写入文件 数据
  • 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);

  1. 向文件中,添加心的数据
  • 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);
});

  1. 大文件操作数据分批读取分批写入
  • 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
上一篇下一篇

猜你喜欢

热点阅读