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");
原文地址:https://www.cnblogs.com/chenhaiyun/p/14706590.html