• node系列--【node中的文件模块】


    node中的文件模块

    作用可以添加、修改、删除操作系统的文件。必须引入 fs 模块

    一、 文件操作

    a) 写入文件 改写 与 覆盖

    ​ 改写: appendFile

    ​ 覆盖: writeFile

    // 异步语法
     let fs = require("fs");
    /* fs.writeFile("./ok.txt","大家好",()=>{
      console.log("写入完成");
    }) */
    /* fs.appendFile("./ok.txt","床前明月光",(err)=>{
      console.log("第一句写入完成");
      fs.appendFile("./ok.txt","疑似地上霜",(err)=>{
        console.log("第二句写入完成");
        fs.appendFile("./ok.txt","举头望明月",(err)=>{
          console.log("第三句写入完成");
          fs.appendFile("./ok.txt","低头思故乡",(err)=>{
            console.log("第四句写入完成");
          })
        })
      })
    }) */
    // 也可以使用async...await解决回调嵌套的问题,
    async function fn(){
      let a = await wFile("床前明月光");
      console.log( a );
      let b = await wFile("疑似地上霜");
      console.log( b );
      let c = await wFile("举头望明月");
      console.log( c );
    }
    fn()
    function wFile(str){
      return new Promise((resolve,reject)=>{
        fs.appendFile("./ok.txt",str,(err)=>{
          if(!err){
            resolve("写入成功")
          }else{
            reject("写入失败")
          }
        })
      })
    }
    
    // 同步语法
    // fs.writeFileSync("./hello.txt","星期五");
    
    b)读文件 readFile
    let fs = require("fs");
    // 参数1:路径; 参数二:回调函数,注意读文件操作回调函数中有两个参数:err和data
    fs.readFile("./ok.txt",(err,data)=>{
      if(!err){
        console.log( data.toString("utf8") );
      }else{
        console.log("读取失败");
      }
    })
    
    let fs = require("fs");
    
    fs.unlink("./hello.txt",(err)=>{
      if(!err){
        console.log("删除完成");
      }else{
        console.log("删除失败");
      }
    })
    
    d) 判断文件是否存在 exists
    let fs = require("fs");
    // 返回布尔值,是否存在指定的文件
    // console.log( fs.existsSync("./ok.txt") ); 
    // 异步
    fs.exists("./hello.txt",(exists)=>{
      console.log( exists );
    })
    
    e)获取文件信息 stat()
    fs.stat("./ok.txt",(err,status)=>{
      if(!err){
        console.log(status);
        // 是否为目录
        console.log( status.isDirectory() ); //false
        // 是否为文件
        console.log( status.isFile() ); //true
      }
    })
    

    二、目录操作

    a) 创建目录 mkdir()
    fs.mkdir("./ok",(err)=>{
      if(!err){
        console.log( "目录创建成功");
      }
    })
    
    b) 删除目录 rmdir()
    // 注意,只能删除空目录。
    fs.rmdir("./ok",(err)=>{
      if(!err){
        console.log( "目录删除成功");
      }else{
        console.log( err );
      }
    })
    
    c) 读目录 readdir()
    let fs = require("fs");
    // 读取指定目录,将目录下的文件名和子目录名称以数组返回
    fs.readdir("./ok",(err,files)=>{
      if(!err){
        console.log( files ); //[ '323.txt', 'hello', 'ok.txt' ]
      }
    })
    

    问题:读取指定目录下的所有文件内容,打印输出

    // 递归思路:
    // 1)遍历读目录返回的数组,判断是否为文件;
    // 2)如果是文件就使用 fs.readFile()读取文件内容。如果是目录就递归调用函数本身再次读取目录,重复第一步
    function readDir(url){
      // 第一次调用时 url : ./ok
      // 第二次调用时 url : ./ok/hello
      fs.readdir(url,(err,files)=>{
        // console.log( files ); // 第一次 [323.txt, hello, ok.txt]
                                 // 第二次 [01.txt, 02.txt]
        for(let item of files){
          // console.log( item ); 
          fs.stat(url+"/"+item,(err,status)=>{
            if( status.isFile() ){
              // 说明是文件,直接读取文件内容
              fs.readFile(url+"/"+item,(err,data)=>{
                console.log( data.toString());
              })
            }else{
              // 说明是目录。
              readDir( url+"/"+item )   // ./ok/hello
            }
          })
        }
      })
    }
    readDir("./ok");
    
    // 同步语法实现
    function readDir(url){
      let files = fs.readdirSync(url);
      for(let item of files){
        let status = fs.statSync(url+"/"+item);
        if( status.isFile() ){
          let data = fs.readFileSync(url+"/"+item)
          console.log( data.toString());
        }else{
          readDir(url+"/"+item)
        }
      }
    }
    readDir("./ok");
    
  • 相关阅读:
    Spring Boot 2 快速教程:WebFlux 集成 Thymeleaf(五)
    Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)
    程序兵法:Java String 源码的排序算法(一)
    oracle等待事件以及解决方案
    记一次数据库参数compatible降级[转]
    R中统计假设检验总结(一)
    Kriging插值法
    数学建模小练习(1):插值【转】
    C++11 lambda表达式
    C++11 正则表达式——基础知识介绍
  • 原文地址:https://www.cnblogs.com/chenhaiyun/p/14706590.html
Copyright © 2020-2023  润新知